【发布时间】:2014-04-03 22:23:51
【问题描述】:
我在使用 WHERE 子句限制左侧结果集时遇到问题,即使我在形成右侧结果集的子查询中放置了相同的条件。这是一个例子:
SELECT shareItems.*, likes FROM shareItems LEFT JOIN
(SELECT users_X_shareItems.itemID, COUNT(users_X_shareItems.userID) AS 'likes'
FROM users_X_shareItems, shareItems WHERE shareItems.itemType = 2 AND
users_X_shareItems.liked = 1
GROUP BY users_X_shareItems.itemID) AS likeTable
ON shareItems.itemID = likeTable.itemID AND shareItems.itemType = 2
尽管我在两个查询中都指定了 shareItems.itemType = 2,但它被忽略了。有人知道为什么吗?谢谢。
【问题讨论】:
-
请注意标题的细微变化 - 一个假设它是 SQL 的错误/问题,而另一个提出问题并要求澄清。一个小问题,但尽量避免“乞求错误”。
-
外部查询中没有 WHERE 子句。如果要在 WHERE 子句中应用谓词,则需要添加 WHERE 子句。顺便说一句...我认为您的人数被夸大了;在内联视图中,您正在对 item_id 执行 GROUP BY,但您正在加入 shareItems 表中
itemType=2的所有行;我们希望看到一个与itemID到shareItems.itemID匹配的连接谓词。它只是看起来对我来说不见了;可能我不了解您的架构或您想要返回的结果集。 -
Spencer,您的观察是正确的,但这只是三向查询的一部分。完整的查询最终确实关联了 itemID。