【问题标题】:Join Multiple tables in oracle sql在oracle sql中加入多个表
【发布时间】:2015-03-17 05:13:02
【问题描述】:

我是 SQL 新手,想知道如何用 SQL 连接替换下面的代码。

我想根据 p_id ='123' 列出所有信息。

select p.p_name,c.c_name,s.s_name,s.s_contact,b.b_name,b.b_contact 
from product p, category c, seller s, buyer b 
where p.p_id="123" and c.p_id="123" and s.p_id="123" and b.p_id="123";

使用的表格

产品表

p_id
p_name

分类表

p_id
c_id
c_name

卖家表

p_id
s_id
s_name
s_contact

买家表

p_id
b_id
b_name
b_contact

谢谢

【问题讨论】:

  • 您已经在进行连接,但使用的是旧版本的语法。 Jens 的答案具有更新版本的语法。
  • 不相关,但是:123 是一个数字,而不是一个字符串。使用single-quotation marks 会引入不必要的implicit conversion
  • 在 ANSI SQL 中,“123”不是字符串,而是分隔标识符。 (即本例中名为 123 的列...)
  • @jarlh,如果你重读我的评论,我说的是单引号而不是双引号。 Oracle 会抛出无效标识符错误。还阅读了OP的问题,他说“我想根据p_id ='123'列出所有信息。
  • @LalitKumarB,是的,我同意。但是在阅读了您的评论后,我也注意到代码示例中的“123”,这就是我写评论的原因。

标签: sql oracle join oracle11g jointable


【解决方案1】:

这是使用连接的查询:

select p.p_name,c.c_name,s.s_name,s.s_contact,b.b_name,b.b_contact 
from product p 
join buyer b  on p.p_id = b.p_id and <second condition>
join category c on  p.p_id = c.p_id
join seller s on c.p_id  = s.p_id
where p.p_id="123" ;

【讨论】:

    【解决方案2】:

    尝试按照以下条件加入所有表格:

    SELECT p.p_name,c.c_name,s.s_name,s.s_contact,b.b_name,b.b_contact 
    FROM product p INNER JOIN category c
    ON   p.p_id = c.p_id
    INNER JOIN seller s
    ON p.p_id = s.p_id
    INNER JOIN buyer b 
    ON p.p_id = b.p_id
    WHERE p.p_id='123';
    

    【讨论】:

    • 产品和买家是否存在AND条件?如何在连接中组合
    • 应该是ON p.p_id = s.p_id AND p.Nextid = s.nextId
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2011-05-18
    • 2011-01-20
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多