使用:
SELECT *
FROM cart
INNER JOIN dkb ON cart.id = dkb.id
WHERE cart.cookieId = '" . GetCartId() . "'"
除dkb
表外,我想使用cdkb
INNER JOIN ON cart.id = cdkb.id
表。
当cdkb添加到现有查询时,如何显示?
答案 0 :(得分:8)
像这样的东西
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() . "'
答案 1 :(得分:2)
最佳做法是明确指定每个表的字段名称,并在每个表上使用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}'
当然,这个滑稽的例子不会让别名的优点闪耀;通常,如果您有一个像CustomersBankAccountData这样的表名,那么别名是理想的。 ;)
EDITED:已更新以显示别名字段名称,这在这种情况下可能比甚至别名表格更有意义。
答案 2 :(得分:1)
您可以根据需要使用尽可能多的JOIN
- 只需将它们添加到查询的from / 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。
答案 3 :(得分:0)
正如你所描述的那样:
SELECT
*
FROM
cart
JOIN dkb
ON cart.id = dkb.id
JOIN cdkb
on cart.id = cdkb.id
WHERE
cart.cookieId = GetCartId()
关于OUTER JOIN,这是一个链接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语法肯定需要一段时间,因为你可以说,因为我仍然错误地解释它(第一次)。 : - )
答案 4 :(得分:0)
您可能会发现本文有用:
http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/
是MySQL,但它在JOINS(INNER,LEFT和RIGHT)的解释中非常通用