Mysql 需要写入efficiet查询

Mysql 需要写入efficiet查询,mysql,sql,Mysql,Sql,你好,我需要帮助写一个查询 下面是我的数据库结构 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 book

你好,我需要帮助写一个查询

下面是我的数据库结构

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
我需要这些书,它们的键具有组合键1和值abc,键2和值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
带有键2和值aab的书不会返回

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

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

您可能还想查看。

这是为了检查该值是否包含key1和abc或key2和aaa,因此它可以返回key1和key2

SELECT * FROM table WHERE key = 'key1' AND value ='abc' OR key = 'key2' AND value = 'aaa'

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

对于给定的示例,这可以通过以下SQL实现:

选择t.id、t.name、k.key1、k.key2 来自测试t 连接选择t.id,k1.value作为键1,k2.value作为键2 来自测试t 在t.id=k1.id和k1上左连接测试k1。`key`='key1' t.id=k2.id和k2上的左连接测试k2。`key`='key2' t.id上的k=k.id 其中k.key1='abc'或k.key2='aaa'; 内部部分将创建一个在主题中包含键的数据透视表,而外部部分将执行结果过滤。你可以玩这个设置

不过,对于这种设计,我建议将主题中的表拆分为两个单独的表:books和params。您可以观察这种设置。 请注意,如果您将过滤条件更改为k.key1='abc'和k.key2='aaa',则只有book10匹配


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

你看过Matten解决方案吗。您认为哪一个更快?实际运行时间需要在大型数据集上进行比较。不过,我不希望看到显著的差异。我可以在它们之间使用AND吗。用例是我有一本书和两个键。它的键1应该有值abc,键2应该有值aaa。如果任何键失败,结果将失败。这是可能的。你能看到我在下面的评论吗。这是可能的。我实际上无法拆分表格,因为这是wordpress的默认设置。谢谢你的建议。你的例子与你的描述不符。你想要两个条件都为真的书还是两个条件都为真的书?我想要两个条件都为真的书。我用数据透视表解决了这个问题。
select 
    id, name, key, value from <table> 
where 
    (key = "key1" and value="abc")
or 
    (key = "key2" and value = "aaa");
SELECT * FROM mytable
WHERE key='key1' AND value='abc'
UNION ALL
SELECT * FROM mytable
WHERE key='key2' AND value='aaa'