gpt4 book ai didi

mysql - 使用子查询进行查询,结果可能有很多

转载 作者:行者123 更新时间:2023-11-29 17:32:08 25 4
gpt4 key购买 nike

我有一个主表,tbl_vluchtgegevens,这是我正在查看的“主”表。由此,我想加入 tbl_photos 并显示该表中的“随机”结果。

我的问题是,在 tbl_vluchtgevevens 中只有 1 列值等于 tbl_photos 中的列值,但是,tbl_photos 中存储了第二列,它类似于 tbl_vluchtgevevens 中的第二列,它需要看着。有一个第三个表,其中 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

最佳答案

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

查询

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

关于mysql - 使用子查询进行查询,结果可能有很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50552453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com