[英]MySQL select the condition only if row in column is duplicated
我想選擇所有滿足所選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和NID 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) ),應該可以
SELECT T1.NID, T1.LID
FROM LNZ AS T1
JOIN (SELECT LID
FROM lnz
WHERE NID = 1 OR NID = 4
group by lid
having count(*)>1) sub ON t1.lid=sub.lid
WHERE (T1.NID = 1 OR T1.NID = 4)
@NemanjaPerovic提供了很好的解決方案,這個解決方案看起來像它,區別在於您可以在這里計算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(*) = (select count(distinct NID) from LNZ where NID in(1,2,4) )
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.