查询结果可能很多的子查询

时间:2018-05-27 13:04:13

标签: mysql subquery

我有一张主表,tbl_vluchtgegevens是" main"我看着桌子。从这开始,我想加入tbl_photos并显示"随机"该表的结果。

我的问题是在tbl_vluchtgegevens中只有1个列值等于tbl_photos中的列值,但是,第二列存储在tbl_photos中,类似于tbl_vluchtgevevens中的第二列,它需要看着。有一个第3个表,其中tbl_photos中的值将具有tbl_vluchtgegevens的值,tbl_luchtvaartmaatschappij

我无法弄清楚MariaDB的MySQL代码。我将尝试在下面显示。

 tbl_vluchtgegevens     |     tbl_luchtvaartmaatschappij     |    tbl_photos
 luchtvaartmaatschappij       luchtvaartmaatschappij
                              IATACode                             img_lvm
 inschrijvingnmr                                                   img_nmr

示例数据:

 tbl_vluchtgegevens
 gegevenID  |  luchtvaartmaatschappij  |  inschrijvingnmr  |  vertrekdatum2
 1             911                        N803NW              2018-01-01 12:00:00
 2             1702                       PH-AON              2018-01-15 17:00:00
 3             911                        N853NW              2018-01-17 11:00:00


 tbl_luchtvaartmaatschappij
 luchtvaartmaatschappijID   |   IATACode
 911                            DL
 1702                           KL
 1803                           LH


 tbl_photos
 photoID   |   img_lvm   |   img_nmr   |   file
 1              DL            N853NW       somefile.jpg
 2              DL            N803NW       somefile2.jpg
 3              DL            N853NW       somefile3.jpg
 4              KL            PH-AON       somefile4.jpg
 5              KL            PH-AON       somefile5.jpg
 6              LH            D-AUBC       somefile6.jpg
 7              DL            N805NW       somefile7.jpg

查询将导致:

 gegevenID  |  vertrekdatum2        |   luchtvaartmaatschappij  |  inschrijvingnmr  |  file
 1             2018-01-15 12:00:00       911                         N803NW             somefile.jpg
 2             2018-01-15 17:00:00       1702                        PH-AON             somefile4.jpg
 3             2018-01-17 11:00:00       911                         N853NW             somefile3.jpg

sqlfiddle:http://www.sqlfiddle.com/#!9/19e222/1

有一次,我尝试使用下面的代码,但是如果tbl_photos中存在多行,那么它会显示tbl_vluchtgegevens中的每一行以及tbl_photos中的所有行。

SELECT DISTINCT vg.gegevenID, vg.vertrekdatum2, vg.inschrijvingnmr, lvm.luchtvaartmaatschappij, lvm.luchtvaartmaatschappijID, p.*

FROM tbl_vluchtgegevens vg

LEFT JOIN tbl_luchtvaartmaatschappij lvm
ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID

LEFT JOIN tbl_photos p 
ON lvm.IATACode = p.img_lvm
AND vg.inschrijvingnmr = p.img_nmr 

WHERE vg.vertrekdatum2 <=NOW() 
ORDER BY vg.vertrekdatum2 DESC

我也试过做一个子查询,但我只做了一个,无论我如何重做代码,我都无法工作。

SELECT vg.gegevenID, vg.vertrekdatum2, vg.inschrijvingnmr, lvm.luchtvaartmaatschappij, lvm.luchtvaartmaatschappijID, p.*

FROM tbl_vluchtgegevens vg

LEFT JOIN tbl_luchtvaartmaatschappij lvm
ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID

(   SELECT p.*, lvm.IATACode, lvm.luchtvaartmaatschappijID
    FROM tbl_photos p 

    LEFT JOIN tbl_luchtvaartmaatschappij lvm
    ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID

    ORDER BY RAND()
    LIMIT 1 ) pho

WHERE vg.vertrekdatum2 <=NOW() AND vg.luchtvaartmaatschappij = pho.luchtvaartnamatschappij AND vg.inschrijvingnmr = pho.img_nmr
ORDER BY vg.vertrekdatum2 DESC

1 个答案:

答案 0 :(得分:0)

一种方法是使用共同相关的子查询

<强>查询

SELECT 
   tbl_vluchtgegevens.gegevenID
 , tbl_vluchtgegevens.vertrekdatum2
 , tbl_vluchtgegevens.luchtvaartmaatschappij
 , tbl_vluchtgegevens.inschrijvingnmr
 , (
     SELECT 
       tbl_photos.file
     FROM 
       tbl_photos
     WHERE
       tbl_photos.img_nmr = tbl_vluchtgegevens.inschrijvingnmr
     ORDER BY 
      RAND()
     LIMIT 1
    ) AS `file`
FROM 
 tbl_vluchtgegevens

WHERE
 tbl_vluchtgegevens.vertrekdatum2 <=NOW() 
ORDER BY
 tbl_vluchtgegevens.vertrekdatum2 DESC

一个可能的结果

| gegevenID |        vertrekdatum2 | luchtvaartmaatschappij | inschrijvingnmr |          file |
|-----------|----------------------|------------------------|-----------------|---------------|
|         2 | 2018-01-01T17:00:00Z |                   1702 |          PH-AON | somefile5.jpg |
|         1 | 2018-01-01T12:00:00Z |                    911 |          N803NW | somefile2.jpg |
|         4 | 2017-03-01T17:00:00Z |                    911 |          N809NW |        (null) |
|         3 | 2017-01-17T11:00:00Z |                    911 |          N853NW | somefile7.jpg |
|         4 | 2016-03-01T17:00:00Z |                   1702 |          PH-AON | somefile3.jpg |

参见演示http://www.sqlfiddle.com/#!9/be9f7/29