【问题标题】:mysql help: Joining Two Tables With a Where Clause and Displaying Rows From the Othermysql help: 使用 Where 子句连接两个表并显示另一个表的行
【发布时间】:2014-11-13 01:46:35
【问题描述】:

编写 SELECT 语句以列出具有 2010 年 1 月 15 日之后购买的产品的供应商数据的产品。

我尝试了多个不同的命令,其中最好的结果来自:

 select * from product where p_indate > '2010-1-15';

列出来自产品表而不是供应商的信息 和

 select p_indate from product right join vendor on p_indate > '2010-1-15'; 

只列出p_indate,每个满足条件的日期有11个重复值

我已经尝试搜索了一段时间,但似乎没有什么完全符合我的问题,感谢您的帮助!

以下是表格: 供应商:

v_code(primary)|v_name|v_contact|v_areacode|v_phone|v_state|v_order

产品

p_code(primary)|p_descript|p_indate(foreign)|p_qoh|p_min|p_price|p_discount|v_code(foreign)

【问题讨论】:

    标签: mysql inner-join outer-join


    【解决方案1】:

    您可以在select中指定p.*和v.*来获取所有产品和供应商数据

    SELECT p.*, v.*
    FROM product p
    JOIN vendor v ON p.v_code = v.v_code 
    WHERE p.p_indate > '2010-01-15' ; 
    

    您还可以通过在字段前加上 p.field name 或 v.field_name 来挑选和选择要返回的字段

    【讨论】:

    • 非常感谢!!最终最终使用SELECT p.p_indate, v.* FROM product p JOIN vendor v ON p.v_code = v.v_code WHERE p.p_indate > '2010-01-15' ;
    【解决方案2】:

    使用on 子句选择表共有的列:

    select  p_indate.*, vendor.*
    from product 
    right join vendor on p_indate.v_code=vendor.v_code 
    where p_indate > '2010-1-15'; 
    

    【讨论】:

    • 这有助于获得一个列,显示它们共有的所有 p_indates > 2010-1-15,但它没有显示更多信息,有没有办法我可以使用供应商表中的相应信息?
    • SELECT p_indate.*, vendor.* FROM product RIGHT JOIN vendor ON p_indate.v_code=vendor.v_code WHERE p_indate > '2010-1-15'; 将返回两个表中的每一列。这效率不高。最好只指定您实际使用的那些列。不要忘记htmlspecialchars 以防止 XSS。
    • 非常感谢您的帮助和解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多