坚持使用mysql查询和JOIN

时间:2013-05-23 14:06:34

标签: mysql join

我有2张桌子。表#1中有IDotacIDmajka以及IDgolub。我需要从表#2中找到与表#1中的3个字段匹配的brojgoluba

例如表#1 ID = 28

(表#1)IDgolub = 1,(表#2)brojgoluba = 06557-07-681

(表#1)IDmajka = 3,(表#2)brojgoluba = 2081-01-271

(表#1)IDotac = 2,(表#2)brojgoluba = 07216-05-552

    SELECT 
    Otac.brojgoluba AS o_brojgoluba,
    Majka.brojgoluba AS m_brojgoluba, 
    mg_golub.ID
    FROM mg_golub
    LEFT JOIN mg_popis_golubova AS Otac ON (Otac.IDotac=mg_golub.ID)
    LEFT JOIN mg_popis_golubova AS Majka ON (Majka.IDmajka=mg_golub.ID)
    WHERE mg_popis_golubova.IDkorisnik='$ID_KORISNIK'

表#1

enter image description here

表#2

enter image description here

注意:问题在于表#2中我必须选择除brojgoluba以外的其他信息,并且我在表#2中有一些链接到其他表的字段< / p>

2 个答案:

答案 0 :(得分:0)

SELECT ID, brojgoluba FROM 
table1, table2
WHERE 
table1.Idkorystnik=1 AND     table2.Idkorystnik=1 AND
(table1.IDgolub=table2.ID OR
 table1.IDMajka=table2.ID OR
 table1.IDotak=table2.id)

答案 1 :(得分:0)

你的回答似乎很顺利。这是吗?

SELECT Otac.brojgoluba AS o_brojgoluba,
       Majka.brojgoluba AS m_brojgoluba, 
       Dotac.brojgoluba as d_brojgoluba,
       mg_golub.ID
FROM mg_golub LEFT JOIN
     mg_popis_golubova Otac
     ON (Otac.IDotac=mg_golub.ID) LEFT JOIN
     mg_popis_golubova Majka
     ON (Majka.IDmajka=mg_golub.ID) LEFT JOIN
     mg_popis_golubova Dotac
     on (Dotac.IDmajka=mg_dotac.ID)
WHERE mg_popis_golubova.IDkorisnik='$ID_KORISNIK'

或者,您可能希望按where子句筛选所有匹配的表。您应该在on子句中执行此操作,这样您就不会丢失任何行:

SELECT Otac.brojgoluba AS o_brojgoluba,
       Majka.brojgoluba AS m_brojgoluba, 
       Dotac.brojgoluba as d_brojgoluba,
       mg_golub.ID
FROM mg_golub LEFT JOIN
     mg_popis_golubova Otac
     ON Otac.IDotac=mg_golub.ID and  and Otac.IDkorisnik='$ID_KORISNIK' LEFT JOIN
     mg_popis_golubova Majka
     ON Majka.IDmajka=mg_golub.ID and Majka.IDkorisnik='$ID_KORISNIK' LEFT JOIN
     mg_popis_golubova Dotac
     on Dotac.IDmajka=mg_dotac.ID and Dotac.IDkorisnik='$ID_KORISNIK'