选择没有行而没有列?

时间:2016-07-26 09:53:02

标签: mysql sql select turing-complete

是否可以编写SELECT语句,该语句返回零行和零列的数据集?

5 个答案:

答案 0 :(得分:3)

数据集始终至少有一列,即使它不包含任何数据。

try{
    $db = new Database($host,$username,$password,$database);    
    $user = 'This user';
    $sql = "SELECT COUNT (user_id) FROM users WHERE username = ?;";
    $result = $db->prepare($sql);  
    $result ->execute(array($user));
    if ($result ->rowCount() > 0) {
       echo 'The user is present';
    } else {
       echo 'There is nothing';
    }
}
catch (Exception $e){
    die('Error : ' . utf8_encode($e->getMessage()));
}

编辑:

正如@eggyal所指出的,上面的语法将返回一个空行。

他的查询SELECT NULL; 不会返回一行。

答案 1 :(得分:1)

在我看来不可能。您将获得至少一列,但没有行。

load

答案 2 :(得分:0)

它通常用于从现有表创建空表

CREATE TABLE NEW_TABLE_NAME AS
  SELECT * 
  FROM EXISTING_TABLE_NAME
  where 1=2

答案 3 :(得分:0)

这适用于Postgresql:


create table test22 ();
select * from test22;

答案 4 :(得分:0)

否,但可以返回没有行的查询。为了在不引用任何表的情况下执行此操作,您可以使用子查询:

SELECT NULL FROM (SELECT NULL) AS temp WHERE false;

此查询将有一个(空)列,但没有行。

当查询在不同情况下不同时,我使用了上面的构造,然后是一个循环遍历结果的代码,并且在某些情况下您希望它跳过循环。用上面的查询替换查询是一种返回空结果并因此跳过没有 if 块的循环的方法。由于查询不包含表名,因此永远不需要更改代码的这一方面,因此我更喜欢在现有查询中添加类似 WHERE false 之类的条件。

与引用 dual 的更简洁的解决方案相比,我更喜欢这种解决方案,因为 PostgreSQL 不支持该结构;此解决方案适用于任何支持子查询的后端。