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