SQL 方法 return if all in join 匹配条件
SQL method to return if all in join match conditions
我浏览这个网站已经有一段时间了,这是我的第一个 post 所以我希望我已经学会了如何查询的正确方法...我一直被这个问题困扰很长一段时间,即使有了所有可用的信息,我仍然迷路了。
我有 3 个 table。
集、UserBudget、ItemCosts
table name column names
----------- ------------------------
Sets SetID
UserBudget UserID | ItemID | ItemBudget
ItemCosts SetID | ItemID | ItemPrice
ItemCosts 包含多个项目,它们连接到 'Sets' table 条目。
只有当 UserBudget 具有与 ItemCosts 相同的项目并且所有 ItemPrice 等于或低于 ItemBudget 时,我才需要一种方法从第一个 table 开始 return SetID。
例如:
Sets ItemCosts UserBudget
----------- ---------- ----------
SetID 1 SetID 1 UserID 1
ItemID 1 2 ItemID 1 2
ItemPrice 10 12 ItemBudget 11 11
这不应该 return 任何东西,因为第二个项目的价格高于用户的预算。
Sets ItemCosts UserBudget
----------- ---------- ----------
SetID 1 SetID 1 UserID 1
ItemID 1 2 ItemID 1 2
ItemPrice 10 12 ItemBudget 11 12
这应该是 return 设置 1。
如果其中一项符合预算,我的任何尝试都会以 return 结束。
这是我当前的 SQL(它最终是一个超级简化的版本,因为我所有复杂的尝试都花了更长的时间来执行,但 return 得到了相同的结果):
SELECT *
FROM UserBudget a
INNER JOIN ItemCosts b on a.ItemID=b.ItemID
INNER JOIN Sets c on b.SetID=c.SetID
WHERE a.UserID=1 AND a.ItemBudget>=b.ItemPrice
您可以尝试下一个解决方案:
SELECT a.UserID, GROUP_CONCAT(DISTINCT b.SetID) SetIDs
FROM UserBudget a
LEFT JOIN ItemCosts b on a.ItemID=b.ItemID AND a.ItemBudget>=b.ItemPrice
LEFT JOIN Sets c on b.SetID=c.SetID
WHERE a.UserID=1
GROUP BY a.UserID
HAVING COUNT(a.UserID) = COUNT(b.SetID)
;
我浏览这个网站已经有一段时间了,这是我的第一个 post 所以我希望我已经学会了如何查询的正确方法...我一直被这个问题困扰很长一段时间,即使有了所有可用的信息,我仍然迷路了。
我有 3 个 table。 集、UserBudget、ItemCosts
table name column names
----------- ------------------------
Sets SetID
UserBudget UserID | ItemID | ItemBudget
ItemCosts SetID | ItemID | ItemPrice
ItemCosts 包含多个项目,它们连接到 'Sets' table 条目。
只有当 UserBudget 具有与 ItemCosts 相同的项目并且所有 ItemPrice 等于或低于 ItemBudget 时,我才需要一种方法从第一个 table 开始 return SetID。
例如:
Sets ItemCosts UserBudget
----------- ---------- ----------
SetID 1 SetID 1 UserID 1
ItemID 1 2 ItemID 1 2
ItemPrice 10 12 ItemBudget 11 11
这不应该 return 任何东西,因为第二个项目的价格高于用户的预算。
Sets ItemCosts UserBudget
----------- ---------- ----------
SetID 1 SetID 1 UserID 1
ItemID 1 2 ItemID 1 2
ItemPrice 10 12 ItemBudget 11 12
这应该是 return 设置 1。
如果其中一项符合预算,我的任何尝试都会以 return 结束。 这是我当前的 SQL(它最终是一个超级简化的版本,因为我所有复杂的尝试都花了更长的时间来执行,但 return 得到了相同的结果):
SELECT *
FROM UserBudget a
INNER JOIN ItemCosts b on a.ItemID=b.ItemID
INNER JOIN Sets c on b.SetID=c.SetID
WHERE a.UserID=1 AND a.ItemBudget>=b.ItemPrice
您可以尝试下一个解决方案:
SELECT a.UserID, GROUP_CONCAT(DISTINCT b.SetID) SetIDs
FROM UserBudget a
LEFT JOIN ItemCosts b on a.ItemID=b.ItemID AND a.ItemBudget>=b.ItemPrice
LEFT JOIN Sets c on b.SetID=c.SetID
WHERE a.UserID=1
GROUP BY a.UserID
HAVING COUNT(a.UserID) = COUNT(b.SetID)
;