我有一个正确的外连接,几乎可以实现我想要的......
SELECT
users_usr.firstname_usr,
users_usr.lastname_usr,
credit_acc.given_credit_acc,
users_usr.created_usr,
users_usr.sitenum_usr,
users_usr.original_aff_usr,
users_usr.id_usr
FROM
credit_acc
right Outer Join users_usr ON credit_acc.uid_usr = users_usr.id_usr
问题是,我想添加一个
where credit_acc.type_acc = 'init'
但是这会消除所有在credit_acc中没有行的用户......这就是为什么我需要一个正确的外部联接。
有没有办法在不必做两个查询和联合的情况下得到这个?
答案 0 :(得分:4)
SELECT
users_usr.firstname_usr,
users_usr.lastname_usr,
credit_acc.given_credit_acc,
users_usr.created_usr,
users_usr.sitenum_usr,
users_usr.original_aff_usr,
users_usr.id_usr
FROM
credit_acc
right Outer Join users_usr ON credit_acc.uid_usr = users_usr.id_usr
WHERE credit_acc.type_acc = 'init' OR credit_acc.type_acc is NULL
或者,正如@Tomalak所指出的那样:
WHERE COALESCE(credit_acc.type_acc, 'init') = 'init'
哪些可能更快(见评论)。
答案 1 :(得分:2)
如果该行不存在, credit_acc.type_acc 应为null。你可以尝试这样的事情:
WHERE credit_acc.type_acc = 'init' OR credit_acc.type_acc IS NULL;
只有在 credit_acc.type_acc 中没有空字段时才会有效。
答案 2 :(得分:1)
您是否尝试过以下操作?
SELECT
users_usr.firstname_usr,
users_usr.lastname_usr,
credit_acc.given_credit_acc,
users_usr.created_usr,
users_usr.sitenum_usr,
users_usr.original_aff_usr,
users_usr.id_usr
FROM
credit_acc
right Outer Join users_usr ON credit_acc.uid_usr = users_usr.id_usr and credit_acc.type_acc = 'init'
答案 3 :(得分:0)
您希望两个表中的所有记录加入用户ID,WHERE credit_acc是'init'还是没有要连接的credit_acc行? <怎么样
where credit_acc.type_acc is null OR credit_acc.type_acc = 'init'
答案 4 :(得分:0)
我会做出谓词:
WHERE credit_acc.uid_usr IS NULL OR credit_acc.type_acc = 'init'
这将为您提供UID_USR上没有匹配项的行,以及匹配且帐户类型为“init”的行。
建议的另一个解决方案(将type_acc检查为NULL)也会为您提供UID_USR匹配且帐户类型的实际值为NULL的行。
如果credit_acc.type_acc不能为NULL,则两者之间没有区别。如果可以,您需要决定是否要在结果集中包含这些行。
答案 5 :(得分:0)
只需在Join Condition中添加另一个谓词。
SELECT U.firstname_usr, U.lastname_usr, C.given_credit_acc,
U.created_usr, U.sitenum_usr, U.original_aff_usr, U.id_usr
From credit_acc C Right Join users_usr U
On C.uid_usr = U.id_usr
And C.type_acc = 'init'
这是有效的,因为在“外部”连接的“其他”一侧的非匹配记录被添加到结果集之前应用了连接条件,而在两个表连接之后应用了Where条件...
此语法更清楚地表示了您的意图......