对于令人困惑的问题,我会尽力澄清。仅当来自不同列的元素匹配时才返回列中元素的SQL语句
我有一个SQL数据库(我没有创建),我想写一个查询。我对SQL知之甚少,所以我甚至不知道要搜索什么来查看这个问题是否已经被问到,所以很抱歉。这对于那些知道的人来说应该是一个简单的解决方案。
我需要的查询是针对我希望在现有数据管理系统上执行的搜索。我想返回给定用户未签名的所有文档,如signoffs_table中的行所示。该数据同样存放于如下:(这实际上是实际架构的简化,并隐藏几个LEFT连接和列)
signoffs_table:
| id | user_id | document_id | signers_list |
天真的解决方案,我不得不是这样做的以下内容:
SELECT document_id from signoffs_table WHERE (user_id <> $BobsID) AND signers_list LIKE "%Bob%";
如果只有鲍勃签署文件,这将起作用。问题是,如果鲍勃和玛丽已经签署了该文件,则表看起来像这样:
signoffs_table:
-----------------------------------------------
| id | user_id | document_id | signers_list |
-----------------------------------------------
| 1 | 10 | 100 | "Bob,Mary,Jim" |
| 2 | 20 | 100 | "Bob,Mary,Jim" |
-----------------------------------------------
(assume Bob's ID = 10 and mary's ID = 20).
,然后当我做了查询,然后我回去DOCUMENT_ID 100(行#2)因为有一个排鲍勃应该签署,但没有。
是我试图做的可能与给定的数据库结构?如果需要,我可以提供更多细节。我不确定需要多少细节。
你可能看试图建立自己的signoffs_table有DISTINCT文件的ID。你也可以考虑做一些事情来规范你的数据,摆脱逗号分隔的列表,比如“bob,mary,jim”。 – mikeY