我写了一个搜索查询,它将加入两个不同的表。我已经把左连接放在两者上。现在第一个表包含 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)。
请指导我,谢谢。
我写了一个搜索查询,它将加入两个不同的表。我已经把左连接放在两者上。现在第一个表包含 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)。
请指导我,谢谢。
明智的做法是记住 JOIN 操作(各种 JOIN 操作,LEFT、RIGHT、INNER、OUTER)的目的是创建一个新的虚拟表,该表由连接在一起的表组装而成。
这个 JOINed 虚拟表应该包含什么?在您的情况下,您的 A.ID 列和 B.AID 列的含义是什么?
如果问题 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
但是您应该非常仔细地考虑这一点。
试试这个逻辑,我希望它对你有用......
select A.*,B.* from A left join B on A.Id=B.AId where B.Id != ''