簡體   English   中英

SQL:選擇在特定列中具有特定值的帳戶的所有行

[英]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

從第1列中選擇並匹配第2列中的行,但僅當表1包含col3中的正確數據時

SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";

解決方案2

從第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM