我有3個表,每個表只有2行。 T1(id,名稱),T2(id,電子郵件),T3(id,電話)。 T1在id1和id2都有註冊,T2只在id1註冊,id2在電子郵件沒有註冊(null)。 T3在id1和id2上都有註冊。 我想加入T1,T2和T3的某些條件(名稱如'%etc%')。結果應該是一個帶有(姓名,電子郵件,電話)的表格,但是如果其中一個連接表格中的註冊爲NULL(例如T2 id2(email)爲NULL),我希望結果是隻有(名稱,電話)(T1 + T3,因爲T2在id2處有一個空註冊)...如果列的註冊不是NULL,則在多個內部連接上有某種類型。 謝謝。如果有任何註冊,mysql會連接多個表
0
A
回答
0
我認爲你需要考慮使用LEFT JOINs
:
SELECT T1.Name, T2.Email, T3.Phone
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
這將從表T1返回所有的記錄,只有那些從T2和T3匹配。其他字段將爲NULL。
然而,如果你想只有那些符合條件的,然後使用內部連接,而不是:
SELECT T1.Name, T2.Email, T3.Phone
FROM T1
INNER JOIN T2 ON T1.id=T2.id
INNER JOIN T3 ON T1.id=T3.id
這隻會返回匹配的記錄。
如果一條記錄爲NULL,那麼你只會返回2列的評論 - 我不認爲這是你想採取的方法。返回你的所有列,並在你的演示文稿中處理這些事情。如果你真的想要動態列,那麼你需要考慮使用動態SQL。
- 編輯 -
動態SQL方法:
SET @id = 2;
SET @sql = NULL;
SELECT
CONCAT(
CASE WHEN EMail IS NOT NULL THEN 'Email' ELSE '' END,
CASE WHEN EMail IS NOT NULL AND Phone IS NOT NULL THEN ',' ELSE '' END,
CASE WHEN Phone IS NOT NULL THEN 'Phone' ELSE '' END)
INTO @sql
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
WHERE T1.Id = @id;
SET @sql = CONCAT('SELECT Name, ', @sql, '
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
WHERE T1.Id = ',@id);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
相關問題
- 1. 在MYSQL中連接多個表不會返回任何結果
- 2. 如何註冊多個grunt-exec任務?
- 3. 如何在MySQL中連接多個表?
- 4. mysql右連接多個表
- 5. Mysql左連接多個表
- 6. 如何在MySQL中將多個表連接到多個表?
- 7. 任何一個表可能有結果時的多表外連接
- 8. MySQL - 如何使用多個ID連接兩個或多個表?
- 9. PHP/MySQL多表連接/工會
- 10. 有多個註冊表與fosuser包
- 11. MySQL:多表連接
- 12. 如何遍歷具有多個結果的連接表?
- 13. 推送註冊表取消註冊連接
- 14. 連接到網絡註冊表
- 15. PHP連接到遠程註冊表
- 16. Java RMI無法連接到註冊表
- 17. MySQL:跨多個表的多列連接?
- 18. 連接兩個表,但沒有得到任何結果
- 19. 獲取所有已註冊的連接
- 20. MYSQL:多個連接
- 21. 多個mysql連接
- 22. 希望Autofac不要註冊任何有多個實現的接口
- 23. 如何使用單個mySql查詢將多個連接表的結果連接到分隔列表中?
- 24. mysql多表連接表
- 25. mysql查詢另一個連接表結果的連接表
- 26. Mysql:多個連接在一個表中
- 27. 註冊遠程通知不會產生任何效果
- 28. 使用會話的多步註冊表單PHP/MySql
- 29. 連接一個註冊頁面,以
- 30. MySQL:如何使用多個連接?
請出示你嘗試過什麼。 – SilentAssassin 2013-03-02 17:42:35