如何在连接表中使用两个关系的条件执行的条件。
。例如,假设我必须表resource
和item
,其中一个资源可以拥有许多项目,并且可以将项目分配给许多资源。
现在我需要选择一个具有两个特定项目的资源?如何以最简单的方式进行操作?
SELECT
r.name,
GROUP_CONCAT(DISTINCT CONCAT(i.name)) AS itemNames
FROM
resources r
LEFT JOIN resources_items ri ON ri.resourceId = r.id
LEFT JOIN items i ON i.id = ri.itemId
WHERE i.id= '1' AND i.id = '2'
GROUP BY r.id
这是一个很好的方向吗?
稍后,我想根据许多项目选择许多资源。例如,所有具有ID的资源在给定数组中或具有ID 1或2
另一种方法是使用IN()
和COUNT()
SELECT
r.name,
GROUP_CONCAT(DISTINCT CONCAT(i.name)) AS itemNames
FROM
resources r
LEFT JOIN resources_items ri ON ri.resourceId = r.id
LEFT JOIN items i ON i.id = ri.itemId
WHERE i.id IN(1,2)
GROUP BY r.id
HAVING COUNT(DISTINCT i.id) = 2
对于更多元素,您只需要更新您的IN
即可等于给定数组的长度
这种方法是特定于mySQL的特定于该方法,它将使用sum()使每个过滤器像
一样SELECT
r.name,
GROUP_CONCAT(DISTINCT CONCAT(i.name)) AS itemNames
FROM
resources r
LEFT JOIN resources_items ri ON ri.resourceId = r.id
LEFT JOIN items i ON i.id = ri.itemId
WHERE i.id IN(1,2)
GROUP BY r.id
HAVING SUM(i.id = 1) > 1
AND SUM(i.id = 2) > 1
并根据您的输入项目重复此SUM(i.id = @itemInput)
子句,以便与第一次接近进行比较,这也是一个复杂的内容,它将涉及否。条件或没有。加入。在第一种方法中,您只需要计算输入并匹配具有子句