[英]MySQL Inner Join with No Rows
我有一個經過規范化的MySQL數據庫,其想法是允許企業選擇零個或多個營銷序列,但關鍵是需要幾個營銷序列(現在我有4個,但是列表可以增長) 。 因此,我所做的就是這樣構造我的表:
sequence
+-------------+------------------+-------+-------------+----------+
| sequence_id | customer_type_id | title | description | required |
| 1 | 1 | ... | ... | true |
| 2 | 1 | ... | ... | true |
| 3 | 1 | ... | ... | false |
| 4 | 2 | ... | ... | true |
| 5 | 3 | ... | ... | true |
| 6 | 4 | ... | ... | false |
+-------------+------------------+-------+-------------+----------+
business_sequence
+----------------------+-------------+-------------+
| business_sequence_id | business_id | sequence_id |
+----------------------+-------------+-------------+
customer_type_id
和business_id
是外鍵字段,它們鏈接到分別描述客戶類型(客戶,前客戶等)和業務信息(名稱,地址等)的表。
之所以在序列表中有required
列,是因為如果一家企業決定不允許任何不需要的序列,那么該企業就不需要一行。 畢竟,如果唯一不同的數據是business_id
字段,那么在business_sequence表中就不需要重復行。
現在,我想做的是從序列表中獲取所有行和所有字段,其中business_sequence表中的business_id與參數化值匹配(例如,我將在第二個示例中顯示1)。 我嘗試使用的查詢是:
SELECT
s.*
FROM
`sequence` AS s
INNER JOIN `business_sequence` AS b ON b.`sequence_id` = s.`sequence_id`
WHERE
b.`business_id` = 1 AND
s.`required` = true;
但是,如果企業在序列表中沒有行,則不會返回任何結果。 我期望它做的是從b.business_id = 1
返回0行,但我也期望它從s.required = true
返回4個“必需”行(id:1、2、4和5)。 。
每當我取出INNER JOIN語句和WHERE子句的business_id部分時,實際上都會返回4個“必需”行。 這使我相信,在我的原始查詢中,因為sequence
表中沒有針對該特定business_id的行,因此它不返回任何內容。
綜上所述,當business_id
字段與參數化值匹配時,如何完成檢索零行或更多行,而當required
字段為true時,如何檢索所有行?
用OR條件代替AND怎么樣?
SELECT
s.*
FROM
`sequence` AS s
INNER JOIN `business_sequence` AS b ON b.`sequence_id` = s.`sequence_id`
WHERE
b.`business_id` = 1 OR
s.`required` = true;
我可以這樣執行UNION來解決我的問題:
SELECT * FROM `sequence` WHERE `required` = true
UNION
SELECT
s.*
FROM
`sequence` AS s
INNER JOIN `business_sequence` AS b ON b.`sequence_id` = s.`sequence_id`
WHERE
b.`business_id` = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.