有没有办法根据条件从其中一个表中选择所有数据?
SELECT * FROM CASE WHEN (another query which will return integer)>0 THEN products ELSE sub_products END LIMIT 0, 25
答案 0 :(得分:0)
修改下面的IntResultQuery以包含返回标量值的查询。
将a.Rslt修改为具有标量值的列的名称。
SELECT *
FROM (IntResultQuery) A
LEFT JOIN Products
on 1=1 and A.Rslt>0
LEFT JOIN Sub_products
on 1=1 and A.Rslt<=0
虽然我同意这个设计很奇怪;你会得到两个表中的列名,所以可能不是你需要的。
SELECT *
FROM (IntResultQuery) A
LEFT JOIN Products
on A.Rslt > 0
LEFT JOIN Sub_products
on A.Rslt <= 0
此联合方法假设两个表具有相同的表结构。通过联合表并创建一个告诉我们数据源的列,我们可以从查询中获取标量结果,并从联合表中选择正确的行。
SELECT *
FROM (SELECT 0 as src, P.*
FROM Products P
UNION ALL
SELECT -1 as src, SP.*
FROM Sub_products SP) Z
CROSS JOIN (IntResultQuery) A
WHERE Z.src > A.Rslt
这种方法避免了两个表的多个列;但如果表格结构不相同则会受到影响。假设至少有一些匹配,您可以指定每个表所需的特定列;并且左边连接不匹配的列。但是这种类型的设计在维护数据方面具有挑战性,因为当需要进行更改时,需要更新哪个表会变得复杂。