我正在尝试在时间戳上连接来自两个表A和B的数据。理想情况下,我希望tableA的每一行都符合unitCode和时间限制,如果tableB中有关联的行,则将其连接,否则假设表B中的颜色已附加,但为空或空。
假设TableA看起来像这样:
id |时间戳|项目1 |项目2 |项目3
表B看起来像这样:
同上|时间戳|项目 B1 |项目 B2
因此,数据可能如下所示:
目前我正在使用这个:
SELECT * FROM tableA AS a JOIN (SELECT * FROM tableB) AS b ON (a.timestamp = b.timestamp) WHERE b.unitCode = 'CODE' AND b.timestamp BETWEEN 'STARTDATETIME' AND 'ENDDATETIME' ORDER BY b.timestamp DESC`
但是它只在给定的tableA有对应的tableB的实例中生成行。
使用< code >左连接。< code>LEFT JOIN获取条件语句左侧的所有记录,以及它在右侧应用的所有记录。但是,您需要小心使用< code>WHERE子句,因为如果它对您的右表(在您的情况下是表' b ')有值限制,那么它仍然会排除那些行。
SELECT * FROM tableA AS a
LEFT JOIN (SELECT * FROM tableB) AS b
ON (a.timestamp = b.timestamp)
WHERE b.unitCode = 'CODE' AND b.timestamp BETWEEN 'STARTDATETIME' AND 'ENDDATETIME' ORDER BY b.timestamp DESC`
LEFT JOIN
引用:https://dev.mysql.com/doc/refman/5.7/en/left-join-optimization.html
正如@Ike所指出的,您的查询可以更正为:
SELECT *
FROM tableA AS a
LEFT JOIN tableB AS b
ON a.timestamp = b.timestamp
AND b.unitCode = 'CODE'
AND b.timestamp BETWEEN 'STARTDATETIME' AND 'ENDDATETIME'
ORDER BY b.timestamp DESC`
正如我前面提到的,如果条件在< code>WHERE子句中,它将排除< code>LEFT JOIN的概念,因此所有具有< code>NULL值的行(因为它不符合表b的标准)都将被排除。
为了解决您的意见,如果您添加了 WHERE
子句,我建议(根据我对您的目标的理解)仅让条件影响表 A,并将 tableB 的所有条件都放在左联接
中。
SELECT *
FROM tableA AS a
LEFT JOIN tableB AS b
ON a.timestamp = b.timestamp
AND b.unitCode = 'CODE'
AND b.timestamp BETWEEN 'STARTDATETIME' AND 'ENDDATETIME'
WHERE
a.timestamp BETWEEN 'STARTDATETIME' AND 'ENDDATETIME'
ORDER BY b.timestamp DESC`
现在,如果a.timestamp
条件是您要查找的,那么LEFT JOIN
中tableB的条件是多余的,因为我们已经知道tableB中的时间戳必须与tableA中的相应时间戳匹配。
我最近开始尝试kafka流。我有一个场景,我需要用加入。可能是因为不包含某些键。在这种情况下,我会得到一个。 具体来说,我得到了 StreamThread-1在处理过程中流应用程序错误:java.lang.NullPointerException 我不知道我该如何处理这个问题。我无法以某种方式过滤掉与表条目不对应的流记录。 使现代化 进一步查看,我发现我可以通过 接口查询基础存储以查找是否存在密钥
问题内容: ** 我定义了以下类和接口: 我有一个的对象,我需要投给的对象: 上面的最后一行导致编译错误“无法从List 强制转换为List ”。我尝试通过以下方法解决此问题: 不幸的是,这引发了。有谁知道我该如何解决? ** 问题答案: ** 您不能像那样抛弃它。创建一个新的: 构造函数采用。无论如何,它将指向相同的引用。 **
我编写了这个函数,它看起来很有用,但我想知道是否有更干净的解决方案。 奖励问题:我有一个java 8约束,但是后来的版本如何改进它?我想我不再需要使用 ,因为 Java 9 引入了 函数。
问题内容: 我剩下两个表,“设备”和“单元”。设备定义设备的类型,单元是唯一的设备,它指向设备表中的一行,并定义其类型。 我现在正在寻找一种解决方案,以从“设备”中选择每种设备类型,并计算指向该设备的设备数量。我目前的解决方案面临的问题是 SQL : Scala Slick : 即使没有单位指向设备类型,我也得到至少1的计数结果。 如何在SQL中或最好在Slick中实现此计数? 问题答案: 您的S
问题内容: 整个晚上 其实是晚上。大约晚上11点。我的大脑正在关闭,需要一些帮助,所以我可以完成工作并回家:) 我有两个表-表a和表b。当其他两个字段匹配时,我需要使用表b中的值更新表a中的字段。这些表的每个记录没有唯一的ID :( 基本上,我想这样做: 或者至少…我认为那是我想要做的… 有人可以帮我吗? 问题答案: 您可以通过更新中的联接来执行此操作:
问题内容: 我有两个表:产品和订单。订单通过ProductID引用产品作为外键。我想知道每种产品已售出多少次,包括仅售出一次的产品。我几乎可以使用左联接来使其工作,但是对于所有产品,无论它们是否存在于orders表中,它仍然会为每一行提供一个计数为1的行。 有没有一种方法可以使您最终得到这样的结果? … 等等。 问题答案: 如果您只执行a ,那么您会将没有订单的产品计为1 … ,这将只计算具有非n