2015-11-04 91 views
2

我正在嘗試在兩個子查詢中查找具有相同ID的所有條目並顯示第一個表。我遇到了使用別名的問題。SQL多個子查詢

(SELECT * 
FROM personTable 
WHERE ID IN 
    ( SELECT ID 
      FROM workerTable 
    ) 
AND firstName LIKE 'O%'); 


(SELECT * 
    FROM ownsTable 
    WHERE PhoneNumberID IN 
     (SELECT ID 
     FROM phonenumberTable 
     WHERE Home <>'' AND `Work` <>'' AND Cell <>'' 
    ) 
); 

我想現在檢查的第一個表的「ID」對第二個表的「是PersonID」,返回的行中第一個表,其中ID和匹配是PersonID。

+1

參見[加入這個偉大的解釋(http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/) –

+0

請顯示您的表格模式,表格中的一些示例數據以及對所需最終結果的清晰說明,以便您可以獲得有關如何利用連接來執行所需操作的更好建議。 –

回答

0

使用Exists做到這一點

SELECT * 
FROM persontable p 
WHERE id IN (SELECT id 
       FROM workertable) 
     AND firstname LIKE 'O%' 
     AND EXISTS (SELECT 1 
        FROM ownstable o 
        WHERE phonenumberid IN (SELECT id 
              FROM phonenumbertable 
              WHERE home <> '' 
                AND ` work ` <> '' 
                AND cell <> '') 
          AND p.id = o.personid); 

此外,如果可能的IN轉換爲Exists所有sub-queries可能是有點高效

+0

謝謝這就是我正在尋找的。我一直試圖使用'AS',但我的語法不正確,所以AND p.id = o.personid);效果很好。 –

0

這聽起來像你可以做一個簡單的加入了這一點:

SELECT p.* 
FROM personTable p 
JOIN ownsTable o ON o.id = p.id AND p.firstName LIKE 'O%' AND o.home <> '' AND o.work <> '' AND o.cell <> ''; 

這將選擇第一個表中的所有列,只要第二個表中存在該id,匹配的行滿足給定的要求。

0

這應該爲你做:)

SELECT * FROM 
    (SELECT * FROM personTable 
    WHERE ID IN (SELECT ID FROM workerTable) 
     AND firstName LIKE 'O%')T1 
    JOIN 
    (SELECT * FROM ownsTable 
    WHERE PhoneNumberID IN 
     (SELECT ID FROM phonenumberTable WHERE Home <>'' AND `Work` <>'' AND Cell <>'')) T2 
    ON (T1.ID = T2.PersonId);