Mysql Complex Where子句

时间:2010-09-20 10:46:06

标签: sql mysql database

当我在MySQL中尝试下面的代码时,我真的很惊讶:

SELECT * FROM table WHERE (key='free_shipping' and value='yes') AND (key='price' and value='5')

它不起作用。我需要同时获得 free_shipping 的产品为'是'且价格等于'5'。如何正确创建此查询?

表格结构:

内容:(表1)

CONTENT_ID   TITLE  DESCRIPTION  DATE

content_fields:(表2)

FIELD_ID   CONTENT_ID    KEY_NAME    VALUE

示例(获取具有1个ID并且其运送免费的产品)

SELECT *  FROM `contents` as c LEFT JOIN `content_fields` as cf ON  c.content_id = cf.content_id WHERE c.content_id = 1 AND  cf.key_name = 'free_shipping' AND cf.value = 'yes'

4 个答案:

答案 0 :(得分:7)

您当前的查询是矛盾的,因为单行永远不能匹配WHERE子句。我想你想要这样的东西。

SELECT product_id
FROM table 
WHERE (key='free_shipping' and value='yes') or (key='price' and value='5')
GROUP BY product_id
HAVING COUNT(DISTINCT key) = 2

答案 1 :(得分:5)

试试这个:

WHERE free_shipping='yes' AND price='5'

或:

WHERE free_shipping=yes AND price=5

如果字段不是字符串

答案 2 :(得分:1)

括号不会改变本声明的含义。没有他们你就有了:

key='free_shipping' and value='yes' and key='price' and value='5'
=>
key='free_shipping' and key='price'
=>
nothing!

尝试WHERE free_shipping='yes' AND price='5'

修改: 废弃物,我现在对你的桌子感到困惑。它只是一堆键/值对吗?我们能看到表结构吗?

答案 3 :(得分:1)

获得免费送货的产品,价值5 ...... 选择不同的x.TITLE 从 内容x,content_fields y,content_fields z 哪里 x.CONTENT_ID = y.CONTENT_ID和 y.CONTENT_ID = z.CONTENT_ID和 y.key_name ='free_shipping'和y.value ='yes'和 z.key_name ='price'和z.value ='5'