我有一个带结构的SQL表
CREATE TABLE IF NOT EXISTS `engine4_user_fields_values` (
`item_id` int(11) unsigned NOT NULL,
`field_id` int(11) unsigned NOT NULL,
`value` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`item_id`,`field_id`,`index`)
)
我想选择具有field_id ='17'且值为IN(5,8,7)+ field_id ='20'且值IN(73,76)
的行我无法像下面给出的那样选择它,因为如果field_id为17则不会是20!
SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) AND (field_id ='20' AND value IN(73,76))
如果我们使用OR,那么它将选择满足任何条件的值。
我们可以使用join吗?我不确定代码! 任何人请帮助我获取此
的选择查询答案 0 :(得分:1)
从你的描述中听起来你应该将中间的AND改为OR。您希望返回与第一个条件或第二个条件匹配的所有行。字段ID不能是17和20.
SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))
答案 1 :(得分:1)
您可以group by
项,并使用having
子句要求该项目包含符合这两个条件的行:
select item_id
from engine4_user_fields_values
group by
item_id
having max(case when field_id ='17' and value in (5,8,7) then 1 end) = 1
and max(case when field_id ='20' and value in (73,76) then 1 end) = 1
答案 2 :(得分:0)
你应该使用OR,但是在两个子条件之间:
SELECT *
FROM `engine4_user_fields_values`
WHERE (field_id ='17' AND value IN(5,8,7))
OR (field_id ='20' AND value IN(73,76))
答案 3 :(得分:0)
你正在使用+ for field_id ='17'和值IN(5,8,7)+ field_id ='20'AND值IN(73,76)
所以从技术上讲,不可能同时使用field_id ='17'和field_id ='20'
您需要使用OR代替AND,如下所示
SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))