![](/img/trans.png)
[英]SQL - how to select all rows which have value1 in column but not value2 in same column?
[英]SQL: Select all rows of the accounts which have certain value in a particular column
我在這個表格中有一些數據:
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x1 a2 c
x2 a1 a
x2 a2 b
x2 a2 c
x3 a3 a
x3 a3 d
x4 a3 d
我想顯示在Col3字段中有'a'的帳戶的所有行(ID1 + ID2)。 所以輸出應該是這樣的
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x2 a1 a
x3 a3 a
x3 a3 d
這是我正在使用的查詢:
SELECT *
FROM t1 table1
WHERE EXISTS
(
SELECT t2.ID1, t2.ID2
FROM t2 table1
where t1.ID1 = t2.ID1
AND t1.ID2 = t2.ID2
AND t2.Col3 = 'a'
)
此查詢花費了大量時間。 有更快的方法嗎?
謝謝!!
我找到了一個解決方案:我工作的表有數百萬行。 因此查詢花了很多時間。 我能夠通過在兩個表上執行主鍵索引來提高速度。
謝謝!! :)
你能更好地解釋一下你想要的嗎? 因為你的示例結果看起來不像你說的那樣(col3中只有'a')並且你的查詢是多余的我認為這個查詢會產生相同的結果:
SELECT * FROM t1 table1
你將取得所有結果
SELECT * FROM table1 WHERE col3 = 'a'
先試試這個:
SELECT DISTINCT a.*
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
如果不想要您,請嘗試以下原始:
SELECT *
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
我認為這可能是解決方案
SELECT *
FROM t1
WHERE ID1 IN (SELECT ID1 FROM t1 WHERE Col3 LIKE 'a')
從第1列中選擇並匹配第2列中的行,但僅當表1包含col3中的正確數據時
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";
從第1列中選擇並匹配第2列中的行,但僅當表1和表2包含col3中的正確數據時
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a" AND Table2.col3 = a;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.