我更换了服务器,这是mysql的最新版本。
首先我的问题是:
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而错误是:
#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设置,所以我的查询必须更改。
发布于 2018-02-17 17:26:56
您有一个GROUP BY子句,但没有聚合函数。因此,有可能根本不需要:
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。这和你的逻辑不一样,但我怀疑这是你真正想要的。
如果您想要每个用户一行,那么您需要一个聚合函数。这可能是你想要的:
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;这将将所有图像合并到一个列中。
发布于 2018-02-17 17:29:56
您使用的是group而不是聚合函数,这在sql中是不建议使用的,并且在大多数数据库中是不允许的,如果您想避免重复的结果,请不要使用group,而是distintc
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'https://stackoverflow.com/questions/48843918
复制相似问题