有没有办法根据条件选择其中一个表中的所有数据?
SELECT * FROM CASE WHEN (another query which will return integer)>0 THEN products ELSE sub_products END LIMIT 0, 25
最佳答案
修改下面的 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
这种方法避免了两个表的多列;但如果表结构不相同,就会受到影响。您可以指定每个表中所需的特定列(假设至少有一些匹配);并在不匹配的列中左连接。但这种类型的设计对于维护数据来说具有挑战性,因为它使需要更改时需要更新哪个表变得复杂。
关于MySql 动态选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47309428/