Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果值为NULL,则使用另一个select语句_Mysql_Sql - Fatal编程技术网

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

Mysql 如果值为NULL,则使用另一个select语句,mysql,sql,Mysql,Sql,我想完全发送另一个查询,如果给定字段的值为NULL,是否可能 大概是这样的: IF the value is null SELECT * FROM `locations` ELSE SELECT * FROM `companies` ENDIF 我想在另一个查询中使用此查询的输出。所以事情会是这样的。如果第一个表中的字段不为null,则从另一个表中获取另一个字段,最后从该If的结果中获取另一个查询 SELECT * FROM `locations

我想完全发送另一个查询,如果给定字段的值为NULL,是否可能

大概是这样的:

   IF the value is null 
      SELECT * FROM `locations`
   ELSE 
      SELECT * FROM `companies`
   ENDIF
我想在另一个查询中使用此查询的输出。所以事情会是这样的。如果第一个表中的字段不为null,则从另一个表中获取另一个字段,最后从该If的结果中获取另一个查询

 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)
未经测试,但应能正常工作

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;

我不知道在您的案例中,您必须如何加入表,但这让您了解如何解决问题。在我的解决方案中,字段是从地点还是从公司获取的决定是基于一条记录一条记录的基础上做出的。

如果我理解,您想在一次调用中检索一个或另一个具有不同表定义的查询,如果某个查询为空?我认为这不是一个好的做法

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

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()){
   // ...
}

与aleroot的贡献相似,但避免了(IMHO)丑陋的案例:(也未经测试)


什么编程语言?纯MySQL?我正在使用PHP。但是需要在普通SQL中编码,因为这将是一个虚拟字段。看起来不错,但我需要检查第二个查询中是否存在该字段。我想这在MYSQL WHERE语句中是不可能的。
SELECT * FROM (SELECT * FROM locations WHERE value IS NULL)
UNION ALL
SELECT * FROM (SELECT * FROM companies WHERE value IS NOT NULL)