我需要從具有兩個城市id(假設爲7333和10906)的表中獲取所有公司ID,但ID不能像我這樣做。從表中獲取同一列中兩個變量的所有行
這是我的表:
,這是我的代碼
SELECT `company_id` as id
FROM `logistics_companies_destinations`
WHERE `city_id`= 7333 and `city_id` = 10906
我需要從具有兩個城市id(假設爲7333和10906)的表中獲取所有公司ID,但ID不能像我這樣做。從表中獲取同一列中兩個變量的所有行
這是我的表:
,這是我的代碼
SELECT `company_id` as id
FROM `logistics_companies_destinations`
WHERE `city_id`= 7333 and `city_id` = 10906
您也可以解決這個使用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
對不起,我平時也看不上像愚蠢的縮寫表名這個,但沒有拿出更好的別名;)
其中一個更好 - 與INNER JOIN或嵌套的SQL查詢? –
「哪一個更好」 - 一個更容易理解,最清楚地表明意圖的人。我更喜歡連接技術,但我認爲初學者發現子選擇/ IN更容易理解。執行計劃應該是相同的。 –
是的,我其次,計劃應該是真正相同的,但我不在這裏運行MySQL,所以我不能肯定地說。但是要補充一點,我也喜歡加入嵌套查詢,因爲它們更容易閱讀並節省大量縮進空間;) – DrCopyPaste
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加入表格兩次,並將過濾條件應用到每個連接]。
哪一個更好 - 使用INNER JOIN或嵌套的SQL查詢? –
「哪一個更好」 - 這是一個更容易理解,並最清楚地表明意圖。我更喜歡連接技術,但我認爲初學者發現子選擇/ IN更容易理解。執行計劃應該是相同的。 –
@MitchWheat完成這個只是一個愚蠢的問題,這次你是否展示了嵌套查詢方法,因爲你想使它對初學者友好? (正如你所說你更喜歡自己加入...) – DrCopyPaste
我相信你的問題是「和」。如果city_id等於「7333」和「10906」,則您正在查找company_id。使用或,它應該工作。
OP希望兩家city_id都不會出現的公司不是那些至少有一家出現在其中的公司 – DrCopyPaste
@DrCopyPaste就像Siyual說的city_id不能等於7333 **和** 10906.所以答案是正確的。 OP需要**或**,而不是**和**。 –
再讀一遍這個問題的第一句話,它並沒有說'有兩個city_id的行'它表示'公司',並且從樣本數據中可以看出公司可以在整個表中出現多次不同的行;) – DrCopyPaste
'city_id'不能同時*兩個*的值。 – Siyual
是的,我知道了,但是解決方法是什麼。 –