我试图让下面的查询不返回重复的值。会发生什么,所有行都是唯一的'但他们有重复的价值观。我尝试使用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);
非常感谢任何帮助。
答案 0 :(得分:0)
嗨,你可以这样使用
WHERE (users.id IS NULL OR users.displayname = 'Test123')
答案 1 :(得分:0)
我建议放弃连接操作的旧式逗号语法,并将其替换为JOIN
关键字。还要考虑将连接谓词从WHERE
子句移动到ON
子句。
该查询似乎正在生成半笛卡尔积...来自mixes
的每个匹配行的multitracks
的每个匹配行都会重复。
如果没有样本数据和预期输出的示例,我们只是在猜测规范。
我的猜测是,我们希望返回与特定用户相关的所有mixes
,以及与该用户相关的所有multitracks
。
我的建议是两个单独的SELECT语句,结果与UNION
或UNION 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 。