当我尝试执行下面的mysql查询时,我不会在WHERE子句中返回所有记录ID的给出。
我想做什么:
加入第二个表(websites_thumbs)通过表1的website_salt记录结果
来自表1的记录的盐,但也来自父站点的盐($ parent_salt)
SUM投票并在记录结果中返回(如果找不到第二个表中的结果返回0)
ID 119和250在第二个表中有投票结果,其他没有。问题 我得到的是,当我执行查询时,它只返回记录1,119& 250其他身份是否存在,但他们不会被退回?
查询:
// VxZQ85cByb98wUx0f3 =>父盐来自另一个查询(页面数据查询)
SELECT
SUM(CASE t.thumb when 1 then 1 else 0 end) as thumbs_up,
SUM(CASE t.thumb when -1 then 1 else 0 end) as thumbs_down,
w.*, t.*
FROM websites as w
LEFT OUTER JOIN websites_thumbs AS t
ON t.similar_website_salt = w.salt AND t.website_salt = 'VxZQ85cByb98wUx0f3'
WHERE w.id IN ('1', '20', '31', '4', '199', '250', '633953')
GROUP BY t.similar_website_salt
第一张表
第二张表
执行结果
希望有人可以帮助我!
由于
答案 0 :(得分:0)
而不是LEFT OUTER JOIN
尝试INNER JOIN
。另外,请勿在{{1}}子句中使用'
。最后,我改变了你IN
的顺序,因为我很挑剔:)
JOIN
如果没有看到表格架构,这很难说,所以如果你想在那里抛出一些它会有所帮助。
答案 1 :(得分:0)
您对GROUP BY
的使用正在消除任何行为similar_website_salt
的行。您需要将null
值更改为其他值(例如空字符串),然后将其分组。请注意,添加COALESCE
的行有两行:
SELECT
SUM(CASE t.thumb when 1 then 1 else 0 end) as thumbs_up,
SUM(CASE t.thumb when -1 then 1 else 0 end) as thumbs_down,
w.*, t.*,
COALESCE(t.similar_website_salt, '')
FROM websites as w
LEFT OUTER JOIN websites_thumbs AS t
ON t.similar_website_salt = w.salt AND t.website_salt = 'VxZQ85cByb98wUx0f3'
WHERE w.id IN ('1', '20', '31', '4', '199', '250', '633953')
GROUP BY COALESCE(t.similar_website_salt, '')
答案 2 :(得分:0)
并非所有记录都在第二个表中都有子记录,所以我们不能 GROUP BY t.similar_website_salt并保留结果集中的记录 这个值。
SELECT
SUM(CASE t.thumb when 1 then 1 else 0 end) as thumbs_up,
SUM(CASE t.thumb when -1 then 1 else 0 end) as thumbs_down,
w.*, t.*
FROM websites as w
LEFT OUTER JOIN websites_thumbs AS t
ON t.similar_website_salt = w.salt AND t.website_salt = 'VxZQ85cByb98wUx0f3'
WHERE w.id IN ('1', '20', '31', '4', '199', '250', '633953')
//GROUP BY t.similar_website_salt
GROUP BY w.id <-- this does the trick