sql join 与列上的多个条件
Posted
技术标签:
【中文标题】sql join 与列上的多个条件【英文标题】:sql join with multiple conditions on columns 【发布时间】:2022-01-03 06:02:54 【问题描述】:我认为我无法通过工会实现这一目标。 例如,我想要所有关键列是“品牌”且价值列是“Burago”的汽车。 最重要的是,键列价格在 100 到 220 之间。
我应该做子查询还是什么?如果我也想查询值为“sport”的键“type”怎么办? 该查询仅在我使用一个 where 子句时返回某些内容,而在使用以下查询时不返回任何内容。
select `posts`.`title` from `posts`
inner join `meta` on `posts`.`id` = `meta`.`metable_id`
where `meta`.`key` = "price" and `meta`.`value` between 100 and 220
and `meta`.`key` = "brand" and `meta`.`value` = "Burago"
group by `posts`.`id`
元表:
ID | post_id | key | value
----------------------------------------------------
69 | 8 | brand | some-brand
----------------------------------------------------
70 | 8 | type | sport
----------------------------------------------------
70 | 8 | price | 100
----------------------------------------------------
71 | 8 | brand | some-other-brand
----------------------------------------------------
70 | 8 | type | coupe
----------------------------------------------------
72 | 8 | price | 150
----------------------------------------------------
73 | 8 | brand | some-brand
----------------------------------------------------
70 | 8 | type | cabrio
----------------------------------------------------
74 | 8 | price | 100
----------------------------------------------------
75 | 8 | brand | some-brand
----------------------------------------------------
70 | 8 | type | sport
----------------------------------------------------
76 | 8 | price | 250
【问题讨论】:
样本数据很好,但您还需要指定预期结果。以及其他表的数据。即minimal reproducible example. 请注意,'2' > '100'。 最近有人问过类似的question。 【参考方案1】:select `posts`.`title` from `posts`
inner join `meta` on `posts`.`id` = `meta`.`metable_id`
where `meta`.`key` = "price" and `meta`.`value` between 100 and 220
and `meta`.`key` = "brand" and `meta`.`value` = "Burago"
group by `posts`.`id`
having COUNT(DISTINCT `meta`.`key`) = 2
【讨论】:
以上是关于sql join 与列上的多个条件的主要内容,如果未能解决你的问题,请参考以下文章