MySql 动态选择表

标签 mysql

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

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/

相关文章:

mysql - 自由RADIU : passing Max-All-Session in SQL

php - 在php中使用MySQL获取计数值

mysql - 我需要在下面的 sql 查询中使用什么类型的连接来检索正确的结果?

mysql - Liferay SQL语法错误异常

mysql - 多线程大量删除查询和批量插入批处理的 SQL 死锁

mysql - 向 MySQL 5.5 表添加索引时何时创建 btree?

php - MySQL查询获取最新结果加上记录数

php 单词微调问题

PHP while 循环和表头仅显示是否设置了 db 值

mysql - 在oracle中创建属于同名不同问题的表