您好我在撰写查询时需要帮助。
以下是我的数据库结构
id name key value
1 book1 key1 abc
2 book2 key2 aaa
3 book3 key5 abc
4 book4 key3 abc
5 book5 key2 aaa
6 book6 key2 aab
7 book7 key1 abc
8 book8 key2 abc
9 book9 key1 abc
10 book10 key1 abc
我需要那些键组合key1与值abc和key2值为aaa的书。
所以它应该返回
1 book1 key1 abc
2 book2 key2 aaa
5 book5 key2 aaa
7 book7 key1 abc
9 book9 key1 abc
10 book10 key1 abc
预订有key2和值aab不会返回。
P.s这只是我为证明我的需要而做的一个示例结构。实际上我正在使用wordpress post meta table。
答案 0 :(得分:2)
select id, name, key, value from <yourTable>
where key = "key1"
or (key = "key2" and value = "aaa");
您可能还想查看documentation。
答案 1 :(得分:2)
select
id, name, key, value from <table>
where
(key = "key1" and value="abc")
or
(key = "key2" and value = "aaa");
答案 2 :(得分:1)
SELECT * FROM mytable
WHERE key='key1' AND value='abc'
UNION ALL
SELECT * FROM mytable
WHERE key='key2' AND value='aaa'
答案 3 :(得分:1)
我认为根据您的设计在某个时间点,每本书会有几个key
+ value
对。这意味着您可能希望选择多个特定键具有某些特定值的书籍。
这可以通过以下SQL实现(对于给定的示例):
SELECT t.id,t.name,k.key1,k.key2
FROM test t
JOIN (SELECT t.id,k1.value AS key1,k2.value AS key2
FROM test t
LEFT JOIN test k1 ON t.id=k1.id AND k1.`key`='key1'
LEFT JOIN test k2 ON t.id=k2.id AND k2.`key`='key2'
) k ON t.id = k.id
WHERE k.key1='abc' OR k.key2 = 'aaa';
内部部分将创建一个带有主题键的旋转表,而外部部分将执行结果过滤。您可以使用此设置here。
但是,对于这样的设计,我建议将主题中的表格拆分为两个单独的表格:books
和params
。您可以观察此类设置here。
请注意,如果您将过滤条件更改为k.key1='abc' AND k.key2 = 'aaa'
,那么您只会book10
匹配。
这个例子很简单,但它提出了这个想法。
答案 4 :(得分:0)
这是为了检查值是否具有key1和abc OR key2和aaa,因此它可以返回key1和key2
SELECT * FROM table WHERE key = 'key1' AND value ='abc' OR key = 'key2' AND value = 'aaa'