在一对多关系中,我想找到满足多的所有特定条件的数据



产品表

id(pk( 名称
1 示例名称1
2 示例名称2

我可以提出两种解决方案:

  • 我们可以运行两个子查询,每个属性一个,然后只返回两个结果集中的productID
  • 我们可以计算返回的包含";蓝色";或";新的">
    注意:如果返回2行,我们假设其中一行是";蓝色";一个是";新的";。如果您的数据可以返回具有相同PID的2行;蓝色";此查询将返回一个假阳性。我们可以用DISTINCT的子查询来解决这个问题,但它不会比解决方案1简单
create table attribute (
ID int primary key,
PID int,
attr VARCHAR(10));
<blockquote\
insert into attribute values
(1,1,'new'),
(2,1,'blue'),
(3,1,'car'),
(4,2,'new'),
(5,3,'blue');
>
<blockquote\
SELECT 
a.PID
FROM
(SELECT PID, attr  FROM attribute WHERE attr ='blue') a
JOIN
(SELECT PID,attr  FROM attribute WHERE attr ='new') b
ON a.PID = b.PID;
>
|PID||--:||1|
<blockquote\
SELECT 
PID  product_id,
COUNT(attr) num_found
FROM attribute
WHERE attr = 'blue' or attr = 'new'
GROUP BY PID
HAVING COUNT(attr) = 2;
>
product_id|num_found---------:|--------:1|2

db<gt;小提琴这里

'我想找到一个同时具有'new''blue'属性'的特定product_id

因此您可以使用条件

select product_id form attrbute_table where attr = 'new' and attr = 'blue' 

IN运算符允许您在WHERE子句中指定多个值。

IN运算符是多个OR条件的简写。https://www.w3schools.com/sql/sql_in.asp

最新更新