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