0

我写了一个搜索查询,它将加入两个不同的表。我已经把左连接放在两者上。现在第一个表包含 60 条记录,而基于第二个表只有 30 条。现在我想如果我的搜索查询应该返回所有 60 条记录。现在它返回 30。查询相同。

选择 A. ,B. 从 A 在 A.Id=B.AId 上左连接 B,其中 A.name=IfNull('tst',A.name) AND B.class=IFNull('c',B.class)。

请指导我,谢谢。

4

2 回答 2

0

明智的做法是记住 JOIN 操作(各种 JOIN 操作,LEFT、RIGHT、INNER、OUTER)的目的是创建一个新的虚拟表,该表由连接在一起的表组装而成。

这个 JOINed 虚拟表应该包含什么?在您的情况下,您的 A.ID 列和 B.AID 列的含义是什么?

  1. 您的 A 表中是否存在具有 A.ID 列值的行在 B.AID 中没有出现?
  2. B 表中是否存在 B.AID 列值在 A.ID 中没有出现的行?

如果问题 1 的答案是 Yes 而问题 2 是 No,那么 LEFT JOIN 会给你想要的。但简化您的查询。尝试这个。

 SELECT A.*, B.*
   FROM A
   LEFT JOIN B ON A.ID = B.AID

如果您碰巧只需要 A 中的行,而 B 中没有相应的行,请尝试此操作。

 SELECT A.*
   FROM A
   LEFT JOIN B ON A.ID = B.AID
   WHERE B.AID IS NULL

如果这两个问题的答案都是肯定的,那么您可能想要这个:

 SELECT A.*, B.*
   FROM A
   OUTER JOIN B ON A.ID = B.AID

但是您应该非常仔细地考虑这一点。

于 2012-06-04T18:25:17.600 回答
0

试试这个逻辑,我希望它对你有用......

select A.*,B.* from A left join B on A.Id=B.AId where B.Id != ''
于 2012-06-04T19:45:54.020 回答