說我有兩個表 - 我的MySQL數據庫中的「Table1」和「Table2」。 「Table1」中的「id」主鍵(auto_increment)是「Table2」 - 「tab_id」中的參考鍵。mysql query join/sub-query/union
對於一個「Table1」行,可能有零個或多個「Table2」行。
現在我試圖在「表格2」列中的某一列上搜索「電子郵件」列,或者在「表格1」列中的某一列上說「地址」並打印「表格1」行值。
我看到有3種可能性:1。 加入 2.子查詢 3.聯盟
1加入
SELECT *
FROM Table1 t1, Table t2
WHERE t1.id = t2.tab_id
AND (t1.address like '%str%' OR t2.email like '%str%');
- 這工作得很好,但是當沒有行在與「Table1」相關的「Table2」中,JOIN將失敗,因此輸出不一致。
2分查詢
SELECT *
FROM Table1 t1
WHERE t1.address like '%str%'
OR t1.id IN (SELECT t2.tab_id
FROM Table2 t2
WHERE t2.email like '%str%');
- 這工作得很好,但是當有 「表2」(比如5K)兩大manys行查詢會很慢:(
3聯盟
SELECT 'relevant_columns'
FROM Table1 t1, Table t2
WHERE t1.id = t2.tab_id
AND (t1.address like '%str%' OR t2.email like '%str%')
UNION
SELECT 'relevant_columns'
FROM Table1 t1
WHERE t1.address like '%str%'
ORDER BY relevant_column
- 這工作得很好,可能會創建一個類似工會認爲,做這項工作
ñ。我的問題什麼是正確的方式......可以總是調用一個UNION嗎?
MySQL的引擎:MyISAM數據
不知道我明白你想要做什麼,但它聽起來像一個外部聯接的工作,而不是一個聯合。也許看看那個? – MJB 2011-06-16 12:31:32