我已经读过这个question。但这是在同一张桌子上。我该如何在两三个表中进行归档:
if (SELECT ViewCode FROM M_VIEW
WHERE ViewCode=?) //if found return
else (SELECT ViewCode FROM M_Customer
WHERE CustomerCode=?)
答案 0 :(得分:3)
您可以使用以下解决方案:
SELECT DISTINCT ViewCode FROM (
SELECT ViewCode, 'M_VIEW' AS tName FROM M_VIEW WHERE ViewCode = 1
UNION ALL
SELECT ViewCode, 'M_Customer' FROM M_Customer WHERE ViewCode = 1
) t GROUP BY tName, ViewCode
HAVING tName = CASE
WHEN SUM(tName = 'M_VIEW') > 0 THEN 'M_VIEW'
WHEN SUM(tName = 'M_Customer') > 0 THEN 'M_Customer'
ELSE ''
END
答案 1 :(得分:3)
这是另一种方法,它将从一个表中返回行:
SELECT ViewCode FROM M_VIEW WHERE ViewCode = @ViewCode
UNION ALL
SELECT ViewCode FROM M_Customer WHERE CustomerCode = @CustomerCode AND NOT EXISTS (
SELECT 1 FROM M_VIEW WHERE ViewCode = @ViewCode
)
请注意,我已将?
替换为变量名以显示哪个?意味着什么。
答案 2 :(得分:2)
假设每个查询应返回0或1行,则可以使用union all,然后对记录和限制进行排序,如下所示:
SELECT ViewCode
FROM (
SELECT ViewCode, 1 seq FROM M_View WHERE ViewCode = ?
UNION ALL SELECT ViewCode, 2 FROM M_Customer WHERE CustomerCode = ?
) t
ORDER BY seq
LIMIT 1
如果第一个查询(来自M_View
)返回一条记录,则排序子句将其放在第一位,而limit 1
则消除可能的其他记录。否则,将选择(唯一的)匹配记录(来自M_Customer
)。