MySQL 仅当列中的行重复时才选择条件

标签 mysql sql database

我想选择满足所选 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/

相关文章:

mysql - SQL多表多对多关系

MySQL 选择时间戳最接近但不超过给定时间戳的行

Mysql 树结构统计所有活跃的 child

php - 可排序的标签列表,就受欢迎程度而言?

sql - 聚合不能出现在 WHERE 子句中 (MSSM studio)

mysql - 插入表格5分钟后自动更新表格

database - 查询谷歌电子表格的特定工作表

php - zend框架-如何将上传的文件保存为mysql中的blob?

MYSQL 选择每个不同条目的平均值

一个查询中有多个选择语句的 PHP/MySQL 问题