2014-07-01 21 views
0

我需要從具有兩個城市id(假設爲7333和10906)的表中獲取所有公司ID,但ID不能像我這樣做。從表中獲取同一列中兩個變量的所有行

這是我的表:

enter image description here

,這是我的代碼

SELECT `company_id` as id 
    FROM `logistics_companies_destinations` 
    WHERE `city_id`= 7333 and `city_id` = 10906 
+0

'city_id'不能同時*兩個*的值。 – Siyual

+0

是的,我知道了,但是解決方法是什麼。 –

回答

1

您也可以解決這個使用INNER JOIN表本身,加入同一company_id,並要求雙方city_ids是存在:

SELECT 
     `lcd1`.`company_id` AS id 
    FROM `logistics_companies_destinations` AS lcd1 
    INNER JOIN `logistics_companies_destinations` AS lcd2 
    WHERE `lcd1`.`city_id`= 7333 AND `lcd2`.`city_id` = 10906 

對不起,我平時也看不上像愚蠢的縮寫表名這個,但沒有拿出更好的別名;)

+0

其中一個更好 - 與INNER JOIN或嵌套的SQL查詢? –

+1

「哪一個更好」 - 一個更容易理解,最清楚地表明意圖的人。我更喜歡連接技術,但我認爲初學者發現子選擇/ IN更容易理解。執行計劃應該是相同的。 –

+1

是的,我其次,計劃應該是真正相同的,但我不在這裏運行MySQL,所以我不能肯定地說。但是要補充一點,我也喜歡加入嵌套查詢,因爲它們更容易閱讀並節省大量縮進空間;) – DrCopyPaste

4

MySQL沒有一個INTERSECT關鍵字,但實現的方式之一是:

SELECT `company_id` as id 
    FROM `logistics_companies_destinations` 
    WHERE 
     `city_id` = 10906 
     and `company_id` IN (SELECT `company_id` as id 
          FROM `logistics_companies_destinations` 
          WHERE `city_id`= 7333) 

[另一種方式(另一張海報)我s加入表格兩次,並將過濾條件應用到每個連接]。

+0

哪一個更好 - 使用INNER JOIN或嵌套的SQL查詢? –

+0

「哪一個更好」 - 這是一個更容易理解,並最清楚地表明意圖。我更喜歡連接技術,但我認爲初學者發現子選擇/ IN更容易理解。執行計劃應該是相同的。 –

+0

@MitchWheat完成這個只是一個愚蠢的問題,這次你是否展示了嵌套查詢方法,因爲你想使它對初學者友好? (正如你所說你更喜歡自己加入...) – DrCopyPaste

-1

我相信你的問題是「和」。如果city_id等於「7333」和「10906」,則您正在查找company_id。使用或,它應該工作。

+0

OP希望兩家city_id都不會出現的公司不是那些至少有一家出現在其中的公司 – DrCopyPaste

+0

@DrCopyPaste就像Siyual說的city_id不能等於7333 **和** 10906.所以答案是正確的。 OP需要**或**,而不是**和**。 –

+0

再讀一遍這個問題的第一句話,它並沒有說'有兩個city_id的行'它表示'公司',並且從樣本數據中可以看出公司可以在整個表中出現多次不同的行;) – DrCopyPaste

相關問題