簡體   English   中英

MySQL內部連接無行

[英]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_idbusiness_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.

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