MySQL查询多行上的WHERE和and
嗨,我有一个关于MySQL查询的问题 我有下表:MySQL查询多行上的WHERE和and,mysql,Mysql,嗨,我有一个关于MySQL查询的问题 我有下表: product_properties <-- table name +------------------------------------------+ | id | property | value | productid | <-- field names +------------------------------------------+ |
product_properties <-- table name
+------------------------------------------+
| id | property | value | productid | <-- field names
+------------------------------------------+
| 1 | example | 230 | 3 | +-- rows
| 2 | power | 110 | 3 | |
| 3 | voltage | 1.2 | 4 | |
| 4 | example | 240 | 4 | |
| 5 | example | 320 | 6 | |
| 6 | power | 100 | 4 | |
| 7 | power | 110 | 6 | +
+------------------------------------------+
这很简单,但现在我想展示所有与'230'匹配的'example'和与'110'匹配的'power'产品
我尝试了以下方法:
SELECT * FROM product_properties WHERE property='example' AND value='230' AND property='power' AND value='110';
SELECT * FROM product_properties WHERE property='example' AND value='230' OR property='power' AND value='110';
第一个查询的问题是,它将返回空,我明白了。
第二个查询的问题是,它还返回属性为“example 230240320”的产品
我的问题是,在这个问题上使用什么方法最好,或者我不应该创建一个动态产品属性表吗?试试:
SELECT *
FROM product_properties
WHERE ( property='example' AND value='230' )
OR ( property='power' AND value='110' );
您必须筛选或(因为这两种情况都不能匹配一条记录),然后查找两者都与
having
子句匹配的属性
SELECT product_id
FROM product_properties
WHERE property='example' AND value='230'
OR property='power' AND value='110'
group by product_id
having count(distinct property) = 2
SELECT product_id
FROM product_properties
WHERE property='example' AND value='230'
OR property='power' AND value='110'
group by product_id
having count(distinct property) = 2