簡體   English   中英

mysql 嵌套選擇語句

[英]mysql nested select statement

我是關系表的新手。 隨着我了解更多,我看到了 sql 語句的許多優點。 但是我堅持了某一點。

我尋找是否可以從 5 個表中獲取所需數據集的單個表。 其中一個名為“eta”的表用於連接其他 4 個表。

目的:一個電話號碼或郵箱可以被多個用戶使用,用戶也可能有多個電話號碼或郵箱。 我想列出電話號碼或電子郵件地址以及使用它們的用戶名。

示例數據:請查看http://sqlfiddle.com/#!2/60acce以獲取表結構和示例數據集

手機殼的最終預期結果如下:

  phone            name    extra
  45336467      ABC Co.   
  45336467      Gery      114
  45336467      Todd      117
  45336467      Adam      119

謝謝

編輯:表關系的解釋。

表 'eta' 有 4 個具有表關系的字段。 'own' 列顯示公司、人員等值 'f' 代表公司,'k' 代表其他人將用於不同的表格

v1_id 用於自己字段的引用表的 id..

“res”列指的是電子郵件和電話表。 電話的值 't' 和電子郵件的值 'e'。 v2_id 用於 res 字段的引用表的 id

通過您的架構歸檔后,我相信以下查詢應該適合您:

SELECT
    phone.tel AS phone,
    CASE WHEN person.name IS NULL THEN company.titles ELSE person.name END AS name,
    eta.extra AS extra
FROM
    eta
    LEFT JOIN person
        ON eta.v1_id = person.id
        AND eta.own = 'k'
    LEFT JOIN company
        ON eta.v1_id = company.id
        AND eta.own = 'f'
    JOIN phone
        ON phone.id = eta.v2_id
WHERE
    eta.res = 't'

如果關系是“電話”表,則假定eta.res = 't' 此外, eta.own = 'k' eta.own = 'f'eta.own = 'f'代表公司。

它使用兩個左連接從person / company表中提取,以便它可以在單個查詢中完成提取。 如果person.name空,則表示當前記錄來自company表並將選擇該值(對於 name 列)。

同樣可以選擇電子郵件地址(假設eta.res = 'e'與電子郵件表相關):

SELECT
    email.email AS email,
    CASE WHEN person.name IS NULL THEN company.titles ELSE person.name END AS name
FROM
    eta
    LEFT JOIN person
        ON eta.v1_id = person.id
        AND eta.own = 'k'
    LEFT JOIN company
        ON eta.v1_id = company.id
        AND eta.own = 'f'
    JOIN email
        ON email.id = eta.v2_id
WHERE
    eta.res = 'e'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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