我有两张桌子:
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),但是如果在DB中有该客户端和文档的条目,则填充日期的额外字段等。因此,对于每个客户端记录,我希望有14行,每个doc_type一行。其中一些行将包含特定于客户端的数据。
这样我在网格中就可以过滤client_id并查看所有文档的列表及其对该人的状态。
这可能吗?
答案 0 :(得分:2)
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。