使用DISTINCT(和GROUP BY给我一个错误)的mySQL查询

时间:2018-04-06 04:20:57

标签: mysql distinct

我试图让下面的查询不返回重复的值。会发生什么,所有行都是唯一的'但他们有重复的价值观。我尝试使用GROUP BY添加max()子句的所有值,但它一直给我一个错误:

SELECT DISTINCT 
users.firstname,
users.lastname,
users.id,
users.displayname,
mixes.artist,
mixes.title,
mixes.id,
multitracks.artist,
multitracks.id,
multitracks.title
FROM users, mixes, multitracks
WHERE users.displayname = 'KarriGrl'
AND (mixes.userId = users.id OR multitracks.userId = users.id);

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

嗨,你可以这样使用

WHERE (users.id IS NULL OR  users.displayname = 'Test123')

答案 1 :(得分:0)

我建议放弃连接操作的旧式逗号语法,并将其替换为JOIN关键字。还要考虑将连接谓词从WHERE子句移动到ON子句。

该查询似乎正在生成半笛卡尔积...来自mixes的每个匹配行的multitracks的每个匹配行都会重复。

如果没有样本数据和预期输出的示例,我们只是在猜测规范。

我的猜测是,我们希望返回与特定用户相关的所有mixes,以及与该用户相关的所有multitracks

我的建议是两个单独的SELECT语句,结果与UNIONUNION ALL设置运算符相结合。我还包括一个鉴别器列,它指示哪一行SELECT返回。

这样的事情:

(
  SELECT umx.firstname
       , umx.lastname
       , umx.id
       , umx.displayname
       , 'mixes'           AS `src`
       , mx.artist
       , mx.title
       , mx.id
    FROM users umx
    JOIN mixes mx
      ON mx.userId = umx.id
   WHERE umx.displayname = 'KarriGrl'
   ORDER
      BY mx.artist
       , mx.title
       , mx.id
)
UNION ALL
(
  SELECT umt.firstname
       , umt.lastname
       , umt.id
       , umt.displayname
       , 'multitracks'     AS `src`
       , mt.artist
       , mt.title
       , mt.id
    FROM users umt
    JOIN multitracks mt
      ON mt.userId = umt.id
   WHERE umt.displayname = 'KarriGrl'
   ORDER
      BY mt.artist
       , mt.title
       , mt.id
)

如果我们需要从集合中删除“重复”行,我们可以将UNION ALL替换为UNION

同样,这是基于实际规范中的 guess