2016-09-28 54 views
0

我有以下查詢,檢查表中的兩列是否in另一個 該查詢的工作原理,我希望你可以優化調用,因爲他們是平等的。如果有性能損失,因爲兩個電話都是相同的查詢用重複優化MySQL查詢

SELECT name,lastname FROM TABLA_A 
WHERE 
name IN (
    SELECT name FROM TABLE_B 
) 
OR 
lastname IN (
    SELECT lastname FROM TABLE_B 
) 

另一種方式

SELECT a.name,a.lastname 
FROM TABLE_A as a 
join TABLE_B as b on a.name=b.name 
or a.lastname= b.lastname 

嘗試加入由我懷疑,是一個有效的選擇嗎?還有其他方法可以使 更有效率嗎?非常感謝你

+0

請同步兩個查詢。很難理解來自兩個查詢的列。如果他們返回相同的結果,請用相同的列名編輯它們。 – Esty

+0

確實INNER JOIN是最好也是最簡單的選擇。 – Esty

+0

您可以使用'EXISTS' – NEER

回答

1

有使用OR性能問題,您可以使用UNION,而不是像這樣:

SELECT name, lastname 
FROM TABLE_A 
WHERE name IN (
    SELECT name 
    FROM TABLE_B) 
UNION -- If there is not any duplicate use `UNION ALL` instead 
SELECT name, lastname 
FROM TABLE_A 
WHERE lastname IN (
    SELECT lastname 
    FROM TABLE_B); 

[SQL Fiddle Demo]

+0

如果值和'a.lastname'''都在TABLE_B中,這會返回重複記錄嗎? – DarkFenix

+0

使用'UNION'會刪除重複!? –

+0

建議使用這種解決方案來消除返回的重複記錄嗎? – DarkFenix

0

正如你已經做了

SELECT a.name, a.lastname 
FROM TABLE_A as a 
INNER JOIN TABLE_B as b on a.name=b.name OR a.lastname= b.lastname 
+0

是我做的方法,還有其他建議嗎? – DarkFenix

+0

不是男人。正如我所說的INNER JOIN是最簡單的連接。 – Esty

1

您可以使用EXIS TS從各方面比IN更有效地工作:

SELECT a.name, 
    a.lastname 
FROM TABLE_A as a 
WHERE EXISTS (SELECT b.name 
      FROM TABLE_B b WHERE a.name = b.name OR a.lastname= b.lastname) 
+0

[使用'EXISTS'和'IN'作爲性能問題沒有區別](http://stackoverflow.com/a/3964770/4519059);)。 –