0

两张桌子

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 程序员,而不是数据库管理员。非常感谢您的帮助!

4

1 回答 1

0

所以你需要媒体和公司的每一种可能的组合吗?哦,那是一个交叉连接。我们不会经常这样做:

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;
于 2013-09-18T17:44:23.903 回答