首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql不兼容sql模式

mysql不兼容sql模式
EN

Stack Overflow用户
提问于 2018-02-17 17:23:02
回答 2查看 130关注 0票数 0

我更换了服务器,这是mysql的最新版本。

首先我的问题是:

代码语言:javascript
复制
SELECT userdata.ONLINE,pictures.IMAGELINK,userdata.BIRTHDATE,userdata.POSITION,InfiniteLove.USERNAME  FROM InfiniteLove
                                  LEFT JOIN pictures ON InfiniteLove.USERNAME = pictures.USERNAME
                                  LEFT JOIN userdata ON InfiniteLove.USERNAME = userdata.USERNAME
                                  WHERE NOT InfiniteLove.USERNAME = 'lalox3' AND InfiniteLove.GENDER = 'M' AND InfiniteLove.SEARCH = 'M' OR InfiniteLove.SEARCH = 'B'
                                  AND NOT InfiniteLove.GENDER = 'W' GROUP BY InfiniteLove.USERNAME

而错误是:

代码语言:javascript
复制
#1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'simplylabs.pictures.IMAGELINK' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我真的得说,如果我要和多张桌子一起工作的话,我就是太蠢了。

我不能更改mysql设置,所以我的查询必须更改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-17 17:26:56

您有一个GROUP BY子句,但没有聚合函数。因此,有可能根本不需要:

代码语言:javascript
复制
SELECT u.ONLINE, p.IMAGELINK, u.BIRTHDATE, u.POSITION, il.USERNAME
FROM InfiniteLove il LEFT JOIN
     pictures p
     ON il.USERNAME = p.USERNAME LEFT JOIN
     userdata u
     ON il.USERNAME = u.USERNAME
WHERE il.USERNAME <> 'lalox3' AND il.GENDER = 'M' AND 
      il.SEARCH IN ('M', 'B') AND 
      il.GENDER <> 'W';

注意<>而不是not . . . =的使用。这是比较传统的语法。我还将OR组合成一个IN。这和你的逻辑不一样,但我怀疑这是你真正想要的。

如果您想要每个用户一行,那么您需要一个聚合函数。这可能是你想要的:

代码语言:javascript
复制
SELECT u.ONLINE, GROUP_CONCAT(p.IMAGELINK) as imagelinks,
       u.BIRTHDATE, u.POSITION, il.USERNAME
FROM InfiniteLove il LEFT JOIN
     pictures p
     ON il.USERNAME = p.USERNAME LEFT JOIN
     userdata u
     ON il.USERNAME = u.USERNAME
WHERE il.USERNAME <> 'lalox3' AND il.GENDER = 'M' AND 
      il.SEARCH IN ('M', 'B') AND 
      il.GENDER <> 'W'
GROUP BY u.ONLINE, u.BIRTHDATE, u.POSITION, il.USERNAME;

这将将所有图像合并到一个列中。

票数 1
EN

Stack Overflow用户

发布于 2018-02-17 17:29:56

您使用的是group而不是聚合函数,这在sql中是不建议使用的,并且在大多数数据库中是不允许的,如果您想避免重复的结果,请不要使用group,而是distintc

代码语言:javascript
复制
  SELECT DISTINCT  userdata.ONLINE
        ,pictures.IMAGELINK
        ,userdata.BIRTHDATE
        ,userdata.POSITION
        ,InfiniteLove.USERNAME  
  FROM InfiniteLove
  LEFT JOIN pictures ON InfiniteLove.USERNAME = pictures.USERNAME
  LEFT JOIN userdata ON InfiniteLove.USERNAME = userdata.USERNAME
  WHERE NOT InfiniteLove.USERNAME = 'lalox3' 
  AND InfiniteLove.GENDER = 'M' 
  AND (InfiniteLove.SEARCH = 'M' OR InfiniteLove.SEARCH = 'B')
  AND NOT InfiniteLove.GENDER = 'W'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48843918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档