我有一个我规范化的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行,但我也期望它返回4" required"来自s.required = true
的行(ID:1,2,4和5)。
每当我拿出INNER JOIN语句和WHERE子句的business_id部分时,它确实会返回4" required"行。这使我相信在我的原始查询中,因为sequence
表中没有针对该特定business_id的行,所以它不会返回任何内容。
说完所有这些,当business_id
字段与参数化值匹配时,如何检索零行或多行?在{{1>时检索所有行} field是真的吗?
答案 0 :(得分:0)
如何使用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;
答案 1 :(得分:0)
我能够通过执行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