我有两个表:
doc_types:
doc_id | doc_name | expiry_days
-------|----------|-------------
1 | Doc_1 | 365
2 | Doc_2 | 90
3 | Doc_3 | 30
docs_supplied:
evidence_id | doc_id | client_id | date_supplied
------------|---------|-----------|-----------------
1 | 1 | 5432 | 13-05-2012
2 | 1 | 3165 | 25-04-2011
3 | 2 | 5432 | 23-10-2011
我想看到的输出是:
doc_id | doc_name | expiry_days | client_id | date_supplied
-------|----------|-------------|-----------|----------------
1 | Doc_1 | 365 | 5432 | 13-05-2012
2 | Doc_2 | 90 | 5432 | NULL
3 | Doc_3 | 30 | 5432 | NULL
1 | Doc_1 | 365 | 3165 | 25-04-2012
2 | Doc_2 | 90 | 3165 | NULL
3 | Doc_3 | 30 | 3165 | NULL
从本质上来说,对于每个客户,我都希望显示文档的完整列表(14),但如果数据库中有该客户和文档的条目,则要填充提供的日期等额外字段。因此,对于每条客户记录,我希望有14行,每一个doc_type行。其中一些行中将包含特定于客户的数据。
这样一来,在我的网格中,我可以仅根据client_id进行过滤,并查看该人的所有文档及其状态的列表。
这可能吗?
最佳答案
SELECT doc_types.*, client_id, date_supplied
FROM doc_types
CROSS JOIN (SELECT DISTINCT client_id FROM docs_supplied) AS clients
LEFT JOIN docs_supplied USING (client_id, doc_id)
ORDER BY client_id DESC, doc_id
在sqlfiddle上查看。
如果您的表具有唯一的
client_id
列,则可以简单地使用该表,而不是通过SELECT DISTINCT
子查询生成该表:SELECT doc_types.*, client_id, date_supplied
FROM doc_types
CROSS JOIN client_accounts
LEFT JOIN docs_supplied USING (client_id, doc_id)
ORDER BY client_id DESC, doc_id
了解有关SQL joins的信息。
关于mysql - MySQL查询:合并结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10734714/