SELECT *
FROM cart
INNER JOIN dkb ON cart.id = dkb.id
WHERE cart.cookieId = '" . GetCartId() . "'"
除了dkb
表,我想INNER JOIN使用ON cart.id = cdkb.id
的cdkb
表。
當cdkb添加到現有查詢時,將如何顯示?
SELECT *
FROM cart
INNER JOIN dkb ON cart.id = dkb.id
WHERE cart.cookieId = '" . GetCartId() . "'"
除了dkb
表,我想INNER JOIN使用ON cart.id = cdkb.id
的cdkb
表。
當cdkb添加到現有查詢時,將如何顯示?
像這樣的事情
SELECT *
FROM Table1 t1 INNER JOIN
Table2 t2 ON t1.ID = t2.ID INNER JOIN
Table3 t3 ON t1.ID = t3.ID INNER JOIN
....
TableN tn ON t1.ID = tn.ID
因此,它看起來像
SELECT *
FROM cart INNER JOIN
dkb ON cart.id = dkb.id INNER JOIN
cdkb ON cart.id = cdkb.id
WHERE cart.cookieId = '" . GetCartId() . "'
您可以使用盡可能多的JOIN
你想要的 - 只要他們添加到/連接查詢的部分:
select *
from cart
inner join dkb on cart.id = dkb.id
inner joion cdkb on cart.id = cdkb.id
WHERE cart.cookieId = '...'
而且,有關詳細信息,請參閱本手冊的這一部分:12.2.8.1. JOIN Syntax。
非常感謝你 – jona 2010-02-12 06:04:27
有些人可能會爭辯說,當聯接的數量超過7時,可能會有數據庫的規範化問題。 – 2010-02-15 01:33:54
完全按照你所描述的:
SELECT
*
FROM
cart
JOIN dkb
ON cart.id = dkb.id
JOIN cdkb
on cart.id = cdkb.id
WHERE
cart.cookieId = GetCartId()
有關外連接,這裏是一個鏈接discussing them:
如果你這樣做:
SELECT
cart.id cart_id,
dkb.id dkb_id,
cdkb.id cdkb_id,
cart.*,
dkb.*,
cdkb.*
FROM
cart
LEFT OUTER JOIN dkb
ON cart.id = dkb.id
LEFT OUTER JOIN cdkb
on cart.id = cdkb.id
WHERE
cart.cookieId = GetCartId()
這意味着你總是會得到每匹配記錄來自購物車,來自的信息dkb和cdkb表格只有在具有該ID的記錄可用時纔會出現,否則它們的字段將爲NULL。我使用了一個LEFT OUTER JOIN,因爲我希望表格的所有記錄位於ON條件的左邊。
一個FULL OUTER JOIN將意味着無論是車。*或DKB或cdkb領域可能爲NULL。
肯定需要一段時間來感受一下OUTER JOIN語法,因爲我可以說,因爲我仍然錯誤地解釋它(第一次)。 :-)
最佳做法是明確指定每個表的字段名稱,並在每個表上使用ALIAS,例如
SELECT
c.field1 AS c_field1
, c.field2 AS c_field2
, c.field3 AS c_field3
, d.field1 AS d_field1
, c2.field1 AS c2_field1
FROM cart AS c
INNER JOIN dkb AS d
ON (c.id = d.id)
INNER JOIN ckdb AS c2
ON (c2.id = c.id)
WHERE c.cookieID = '{VALUE}'
當然這個glib的例子不會讓別名的優點大放異彩;通常如果你有一個像CustomersBankAccountData這樣的表名,那麼一個別名是理想的。 ;)
EDITED:更新顯示別名字段名稱,這使得在這種情況下可能更有意義,甚至比表甚至別名。
你會發現這篇文章有幫助:
http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/
是說MySQL的,但它是連接中的解釋相當通用(內,左和右)
好吧,我有一個包含一個URL cdkb.id或dkb.id然後該ID將激活cart.id取決於其中一個表的ID?那麼如果在兩個表中都找到了來自網址的ID呢?查詢現在將如何激活哪個表? – jona 2010-02-13 18:39:17