如果值为NULL,则为另一个select语句

时间:2011-12-03 17:31:35

标签: mysql sql

如果给定字段的值为NULL,我想完全发送另一个查询吗?

这样的事情:

   IF the value is null 
      SELECT * FROM `locations`
   ELSE 
      SELECT * FROM `companies`
   ENDIF

我想在另一个查询中使用此查询的输出。所以它会是这样的。如果第一个表中的字段不为空,则从另一个表中获取另一个字段,最后从该结果中获取另一个if。

4 个答案:

答案 0 :(得分:4)

 SELECT * FROM `locations` WHERE 1 = (CASE WHEN value IS NULL THEN 1 ELSE 0 END)
 UNION ALL
 SELECT * FROM `companies` WHERE 1 = (CASE WHEN value IS NOT NULL THEN 1 ELSE 0 END)

未经测试但应该有效。

答案 1 :(得分:1)

类似于aleroot的贡献,但避免(恕我直言)丑陋案件:(也未经测试)

SELECT * FROM (SELECT * FROM locations WHERE value IS NULL)
UNION ALL
SELECT * FROM (SELECT * FROM companies WHERE value IS NOT NULL)

答案 2 :(得分:0)

SELECT
    CASE WHEN L.value IS NULL THEN C.x ELSE L.x END AS x,
    CASE WHEN L.value IS NULL THEN C.y ELSE L.y END AS y,
    CASE WHEN L.value IS NULL THEN C.z ELSE L.z END AS z,
  ...
FROM
    locations L
    LEFT JOIN companies C
        ON L.LocationID=C.LocationID;

我不知道在你的情况下你将如何加入你的牌桌,但这会让你知道如何解决问题。在我的解决方案中,是否从地点或公司获取字段的决定是逐个记录的。

答案 3 :(得分:0)

如果我理解,你想在一次调用中使用不同的表定义来检索一个或另一个查询,如果某些内容为null?我认为这不是一个好习惯......

使用MysqlI和存储过程,您可以读取最后执行的选择,但很奇怪:

DELIMITER //
CREATE PROCEDURE make_weird_query() BEGIN
   IF something is null THEN
      SELECT * FROM `locations`;
   ELSE 
      SELECT * FROM `companies`;
   ENDIF;
END;//

在PHP中:

$query = $mysql->query("CALL make_weird_query()");
while($row = $query->fetch_assoc()){
   // ...
}