产品表
id(pk( | 名称 |
---|---|
1 | 示例名称1 |
2 | 示例名称2 |
我可以提出两种解决方案:
- 我们可以运行两个子查询,每个属性一个,然后只返回两个结果集中的productID
- 我们可以计算返回的包含";蓝色";或";新的">
注意:如果返回2行,我们假设其中一行是";蓝色";一个是";新的";。如果您的数据可以返回具有相同PID的2行;蓝色";此查询将返回一个假阳性。我们可以用DISTINCT的子查询来解决这个问题,但它不会比解决方案1简单
<blockquote\create table attribute ( ID int primary key, PID int, attr VARCHAR(10));
✓
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