是否可以INNER JOIN多个表?

时间:2010-02-12 05:33:57

标签: sql

使用:

    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添加到现有查询时,如何显示?

5 个答案:

答案 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)的解释中非常通用