如何在一个MySQL查询中获取另一个表中引用的数据

时间:2014-09-22 02:44:13

标签: php mysql sql

我想从mysql中选择一些数据。但是,我正在查询的表中存储的一些数据是在代码中,并且我需要将该数据引用到另一个表中来获取文本描述。

TABLE: persons

SELECT id, first_name, last_name, address_code, customer_type_code
FROM persons
WHERE id = 1001    

TABLE: ref_address 

SELECT address_name FROM ref_address
WHERE address_code = 123


TABLE: ref_customer_type_code   

SELECT customer_type_name FROM ref_customer_type_code
WHERE customer_type_code = 456

如何将所有三个查询组合在一起,在一个查询中返回id,first_name,last_name,address_name,customer_type_name,而不是像这样查询它们3次?

2 个答案:

答案 0 :(得分:0)

您正在寻找的是JOIN

JOIN中,您可以指定两个表以及它们彼此之间的关系。在单个SELECT语句中,您可以有多个JOIN子句。

SELECT
    p.id, p.first_name, p.last_name, p.address_code, p.customer_type_code,
    a.address_name,
    t.customer_type_name

FROM
    persons p

    JOIN ref_address a
        ON p.address_code = a.address_code

    JOIN ref_customer_type_code t
        ON p.customer_type_code = t.customer_type_code

WHERE
    p.id = 1001

此查询表示表格personsref_address应与每个表格中提供的相关列address_code相关联,或者加入#34;}。表personsref_customer_type_code由列customer_type_code链接的表格也是如此。

答案 1 :(得分:0)

Please read the reference manual for join

简而言之,你需要在表之间定义一个关系(我使用别名只是为了让事情变得更简单,#34;更便宜"写):

select p.id, p.first_name, p.last_name, p.address_code, p.customer_type_code
     , ra.address_name
     , rctc.customer_type_name
from persons as p
     -- Join the persons table with the ref_address table, 
     -- using the address_code column of each table
     inner join ref_adress as ra 
                on p.address_code = ra.address_code
     -- Join the persons table with the ref_customer_type_code table
     -- using the customer_type_code column of each table
     inner join ref_customer_type_code as rctc 
                on p.customer_type_code = rctc.customer_type_code
where p.id = 1001

请注意,在查询中使用多个表时,定义别名可能很有用,以避免必须一次又一次地写入表的全名。此外,显式指定每个字段的源表(通过别名,如果您使用它)可能是个好主意。