2017-04-14 78 views
-1

我有3行的表信息:id,monter1,monter2。 Monter1和monter2是我想要加入的表monterzy(id,name,surname)的id。问题是我无法做出正确的查询来获取这些值,然后在PHP中。目前,我有:MySQL将同一表中的数据连接两次

SELECT i.id 
    , m.name 
    , m.surname 
    FROM info i 
    JOIN monterzy m 
    ON i.monter1 = m.id; 

我想将它扩大到也得到monter2和相应的名字和姓氏。我在谷歌搜索,有AS的例子,但我不知道如何做到这一点。谢谢!

+0

的可能的复制(HTTP ://stackoverflow.com/questions/4267929/whats-the-best-way-to-join-on-the-same-table-twice) –

回答

0

您需要使用不同的别名

SELECT info.id, 
     m1.name as m1_name, m1.surname as m1_surname, 
     m2.name as m2_name, m2.surname as m2_surname 
FROM info 
INNER JOIN monterzy m1 ON info.monter1 = m1.id 
INNER JOIN monterzy m2 ON info.monter2 = m2.id 
0

你只需要别名的表加入同一个表两次。也就是说,同一个表的每个连接都给它一个不同的别名(名称),以便查询的其余部分知道哪个是哪个。事情是这样的:

SELECT 
    info.id, 
    m1.name, 
    m1.surname, 
    m2.name, 
    m2.surname 
FROM 
    info 
    INNER JOIN monterzy AS m1 ON info.monter1 = m1.id 
    INNER JOIN monterzy AS m2 ON info.monter2 = m2.id 

通知了每个连接具有一个AS someAlias给连接表的新名称只是为了这个查询的目的。以及查询的其余部分如何引用别名而不是表名。

0

您需要使用表的别名此:?什么是加入同一个表的最佳途径两次]

SELECT info.id, m1.name as name1, m1.surname as surname1, m2.name as name2, m2.surname as surname2 
FROM info 
INNER JOIN monterzy m1 ON info.monter1 = m1.id 
INNER JOIN monterzy m2 ON info.monter2 = m2.id; 
0

您可以使用左连接

SELECT 
    info.id, 
    m1.name, 
    m1.surname, 
    m2.name, 
    m2.surname 
FROM 
    info 
    INNER JOIN monterzy AS m1 ON info.monter1 = m1.id 
    LEFT JOIN monterzy AS m2 ON info.monter2 = m2.id