我想选择满足所选 LID 的所有 LID。我有一个名为 LNZ 的表,例如如下所示:
+------------+
| LNZ |
+-----+------+
| NID | LID |
+-----+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
| 4 | 1 |
| 4 | 2 |
+-----+-------+
我想要的是,在本例中选择包含 NID 1 和 4 的所有条目。但可能选择了两个以上的 NID。
对于 NID 1 和 4,输出应为:
+------------+
| LNZ |
+-----+------+
| NID | LID |
+-----+------+
| 1 | 1 |
| 1 | 2 |
| 4 | 1 |
| 4 | 2 |
+-----+-------+
如果我这样做
SELECT NID, LID
FROM lnz
WHERE NID = 1 OR NID = 4;
我得到这个错误的结果:
+------------+
| LNZ |
+-----+------+
| NID | LID |
+-----+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 4 | 1 |
| 4 | 2 |
+-----+-------+
它适用于以下 SQL 语句,但它不是具有所需 NID 的变量
SELECT T1.NID, T1.LID
FROM LNZ AS T1
JOIN LNZ AS T2 ON T1.LID = T2.LID
WHERE T1.NID = 1 AND T2.NID = 4
OR T2.NID = 1 AND T1.NID = 4;
我现在的问题是...我如何更改此语句,使其随所选 NID 的数量而变化?
如果您不明白我的意思,请随时询问。
最佳答案
如果你尝试
SELECT * FROM LNZ
WHERE NID IN (1,2,4)
AND LID IN (
select LID from LNZ
WHERE NID IN (1,2,4)
GROUP BY LID
HAVING COUNT(*) = 3
)
在您用来构建查询的语言中,您动态地将 (1,2,4) 设置为您想要的 NID 值,并设置计数(在我的示例中,基于您想要的 NID 数量)是 3),它应该可以工作
关于MySQL 仅当列中的行重复时才选择条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025763/