两张桌子
MEDIA_APPROVALS
[media_id] [firm_id] [approval_status]
FIRM_LIST
[firm_id] [firm_code]
最终目标是展示哪些媒体未被哪家公司批准。
默认情况下,MEDIA_APPROVALS表中列出的所有媒体都不会被FIRM_LIST表中列出的公司批准。因此,为了使媒体获得批准,该行必须包含firm_id,并且approval_status = 1.
如果媒体作品位于MEDIA_APPROVALS表格中,并且该行包含firm_id和approval_status = 0,这很容易 - 它未被批准。
对我来说很棘手的是:如果MEDIA_APPROVALS表中有一个关于media_id / firm_id连接的MISSING ROW,那么该media_id不会被批准用于该公司。
最终我想达到这个目的:
MEDIA_APPROVALS
100 1 1
100 2 1
101 1 0
101 2 0
101 3 1
102 1 1
FIRM_LIST
1 AA
2 BB
3 CC
QUERY OUTPUT
100 CC 0
101 AA 0
101 BB 0
102 BB 0
102 CC 0
我是PHP / Web程序员而不是数据库管理员。非常感谢帮助!
答案 0 :(得分:0)
所以你需要Media和Firm的所有可能组合?哦,这是一个交叉加入。我们不经常这样做:
WITH MediaFirms As (
SELECT m_id.media_id, f_id.firm_id
FROM (SELECT DISTINCT media_id FROM MEDIA_APPROVALS) m_id
CROSS JOIN (SELECT DISTINCT firm_ID FROM FIRM_LIST) f_id
)
SELECT mf.media_id, mf.firm_id, coalesce(ma.approval_status, 0) "approval_status"
FROM MediaFirms mf
LEFT JOIN MEDIA_APPROVALS ma ON ma.media_id = mf.media_id AND ma.firm_id = mf.firm_id
WHERE coalesce(ma.approval_status,0) <> 1;