Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 非标准sql查询_Mysql_Sql_Select - Fatal编程技术网

Mysql 非标准sql查询

Mysql 非标准sql查询,mysql,sql,select,Mysql,Sql,Select,我需要从examplar表中选择已定义idBook的项目,这些项目当前未订购(预订)“订单”表中的dateReturn字段不为空 表订单可以包含以前使用相同idExemplar完成的订单 如果示例在“orders”表中至少有一条dateReturned=null的记录,则应排除此示例 我已尝试使用此查询: 但是,如果表orders包含具有相同idExemplar的先前满足的订单,则会给出错误的结果,这是了解外部联接的理想时间: 这是我最喜欢的例子之一 SELECT * FROM exempla

我需要从
examplar
表中选择已定义idBook的项目,这些项目当前未订购(预订)“订单”表中的dateReturn字段不为空

订单
可以包含以前使用相同idExemplar完成的订单

如果示例在“orders”表中至少有一条dateReturned=null的记录,则应排除此示例

我已尝试使用此查询:
但是,如果表orders包含具有相同idExemplar的先前满足的订单,则会给出错误的结果,这是了解外部联接的理想时间: 这是我最喜欢的例子之一

SELECT * 
FROM exemplar 
LEFT JOIN orders 
  on orders.idExemplar=exemplar.idExemplar 
WHERE dateReturned is null 
有点困惑于双重否定。。。但既然您说过,“如果示例在“orders”表中至少有一条dateReturned=null的记录,那么应该排除这个示例!”
我认为您希望dateReturned为NULL,如果我正确理解了问题,这应该可以解决问题:

select * 
from exemplar 
where not exists 
  ( select * 
    from orders 
    where orders.idExemplar=exemplar.idExemplar 
    and dateReturned is null )

这将返回一个示例列表,其中带有null order dateReturned order,其中idExemplar在orders中只有一行

SELECT e.* 
FROM exemplar e 
INNER JOIN orders o
ON e.idExemplar = o.idExemplar
WHERE 
o.idExemplar IN ( 
    SELECT o.idExemplar FROM orders o 
    GROUP BY o.idExemplar 
    HAVING COUNT(o.idExemplar) = 1
) AND o.dateReturned IS NULL 
这使用
where
子句中的子查询来检查当前订单idExemplars是否在唯一idExemplars集合中。它通过计算每个idExemplar的实例并丢弃任何多次出现的实例来实现此目的。

类似于,但表达方式不同:

1) 使用不在中的

SELECT *
FROM exemplar
WHERE idExemplar NOT IN (SELECT idExemplar FROM orders WHERE dateReturned IS NULL)
2) 使用
左连接
+
其中为空

SELECT e.*
FROM exemplar e
LEFT JOIN ON orders o ON e.idExemplar = o.idExemplar AND o.dateReturned IS NULL
WHERE o.idExemplar IS NULL

你为什么不在我刚才为你回答的问题上这么说?可以为您将其纳入解决方案中。您可以说得清楚一点,您告诉我们dateReturned列不是null,但您需要找到dateReturned=null的行。不应该包括'Examplar'表中具有非null dateReturned的行。它表示至少有一行,因此很可能会更改为>=:)是的,也许是最好的办法。
SELECT e.*
FROM exemplar e
LEFT JOIN ON orders o ON e.idExemplar = o.idExemplar AND o.dateReturned IS NULL
WHERE o.idExemplar IS NULL