0

我有两张桌子,A和B。

A的字段:id,name

-----------------
 ID |   NAME    |
-----------------
 1  |   name1   |
-----------------
 2  |   name2   |
-----------------
 3  |   name3   |
-----------------
 4  |   name4   |
-----------------
 5  |   name5   |
-----------------

B的字段:bid,id

-----------------
 BID    |   ID  |
-----------------
 11     |   1   |
-----------------
 11     |   2   |
-----------------
 12     |   1   |
-----------------
 12     |   2   |
-----------------
 12     |   3   |
-----------------

我想执行查询以显示 A 中的所有记录,左侧有 A.id、A.name 列。并从 B ON id WHERE bid = '11'加入第三列。

所以我会有这样的事情:

--------------------------------
 A.ID   |   A.NAME  |   B.BID
--------------------------------
 1      |   name1   |   11
--------------------------------
 2      |   name2   |   11
--------------------------------
 3      |   name3   |
--------------------------------
 4      |   name4   |
--------------------------------
 5      |   name5   |
--------------------------------

有什么建议么?

4

3 回答 3

3

你会想要使用一个LEFT JOIN

SELECT A.ID, A.NAME, B.BID
FROM A
LEFT JOIN B
   ON A.id = B.id
WHERE B.BID = yourValue -- use the WHERE clause for additional filtering

请参阅带有演示的 SQL Fiddle

根据您的更新,您需要将过滤器从WHERE子句移动到JOIN

SELECT A.ID, A.NAME, IFNULL(B.BID, '') BID
FROM A
LEFT JOIN B
   ON A.id = B.id
  and b.bid = 11

请参阅带有演示的 SQL Fiddle

于 2012-10-05T15:02:06.293 回答
2

列出所有值,无论bid是否具有以下值left join

select a.id, a.name, b.bid
from a
left join b on b.id = a.id
where b.bid = 11

使用inner joinifbid具有特定值:

select a.id, a.name, b.bid
from a
inner join b on b.id = a.id
where b.bid = 11

连接的好解释

SQLFiddle 示例

于 2012-10-05T15:02:28.737 回答
1

table_B 中是否有一列与 table_A 中的 a.id 包含相同的值?否则,您将无法将 table_b 连接到 table_a。你在这里需要的是

WHERE bid = ? 

应该是这样的

WHERE bid = a.bid

或者

WHERE a.ID = b.AID
于 2012-10-05T15:06:46.143 回答