MySql动态选择表

时间:2017-11-15 14:02:54

标签: mysql

有没有办法根据条件从其中一个表中选择所有数据?

SELECT * FROM  
CASE WHEN (another query which will return integer)>0 THEN products ELSE sub_products END
LIMIT 0, 25

1 个答案:

答案 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

这种方法避免了两个表的多个列;但如果表格结构不相同则会受到影响。假设至少有一些匹配,您可以指定每个表所需的特定列;并且左边连接不匹配的列。但是这种类型的设计在维护数据方面具有挑战性,因为当需要进行更改时,需要更新哪个表会变得复杂。