-3

您好,我在编写查询时需要帮助。

下面是我的数据库结构

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 的书不会返回。

Ps 这只是我为了证明我的需要而制作的一个示例结构。实际上,我正在研究 wordpress 后元表。

4

5 回答 5

2
select id, name, key, value from <yourTable> 
where key = "key1" 
or (key = "key2" and value = "aaa");

您可能还想查看文档

于 2012-05-12T14:50:06.530 回答
2
select 
    id, name, key, value from <table> 
where 
    (key = "key1" and value="abc")
or 
    (key = "key2" and value = "aaa");
于 2012-05-12T14:52:05.413 回答
1
SELECT * FROM mytable
WHERE key='key1' AND value='abc'
UNION ALL
SELECT * FROM mytable
WHERE key='key2' AND value='aaa'
于 2012-05-12T14:55:30.210 回答
1

我认为根据您的设计,在某个时间点,每本书会有几双keyvalue这意味着您可能希望选择几个特定键具有某些特定值的书籍。

这可以通过以下 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';

内部部分将创建一个带有主题键的透视表,而外部部分将执行结果过滤。您可以在此处使用此设置。

不过,对于这种设计,我建议将主题中的表格分成 2 个单独的表格:booksparams. 您可以在此处观察此类设置。请注意,如果您将过滤条件更改为k.key1='abc' AND k.key2 = 'aaa',那么您将只有book10匹配。

这个例子很简单,但它给出了想法。

于 2012-05-12T16:30:07.767 回答
0

这是为了检查值是否有 key1 和 abc 或 key2 和 aaa,所以它可以返回 key1 和 key2

SELECT * FROM table WHERE key = 'key1' AND value ='abc' OR key = 'key2' AND value = 'aaa'
于 2012-05-12T14:50:24.737 回答