3

我有两张桌子

表 1:违规列:日期、时间、pdid、pname、v1、v2、v3、v4

每个 v1 到 v4 都有一个整数值,对应于表 2 中的单个条目 (ID)。

表 2:parking_violations 列:代码、部分、描述、ID

我需要根据 pdid 查询每条违规记录,并将每个“v1-v4”与 p_violations 表中的“ID”列匹配。

SELECT 
    parking.date,
    parking.time,
    parking.pname,
    parking_violations.code,
    parking_violations.section,
    parking_violations.description
FROM 
    parking
INNER JOIN parking_violations ON parking.v1=parking_violations.ID
WHERE 
    pdid=5

这将返回 V1 的正确记录,但我无法弄清楚如何通过将值与 ID 匹配来返回所有填充的 V2-V4。

4

2 回答 2

0

多次使用 join 和别名,如下所示:

SELECT 
    parking.date,
    parking.time,
    parking.pname,
    parking_violations.code,
    parking_violations.section,
    parking_violations.description
FROM 
    parking
INNER JOIN parking_violations ON parking.v1=parking_violations.ID
inner join parking_violations a ON parking.v2=a.ID
inner join parking_violations b ON parking.v3=b.ID
inner join parking_violations c ON parking.v4=d.ID
WHERE 
    pdid=5
于 2018-10-02T04:45:09.983 回答
0

就像@fa06 解释的那样,您可以对同一个表使用多个连接,但我将使用左连接而不是内部连接,这样我就可以灵活地获取并非所有vN在表 parking_violations 上都有匹配 ID 的行。

SELECT 
    parking.date,
    parking.time,
    parking.pname,
    pv1.code,
    pv1.section,
    pv1.description,
    pv2.code,
    pv2.section,
    pv2.description,
    pv3.code,
    pv3.section,
    pv3.description,
    pv4.code,
    pv4.section,
    pv4.description
FROM
    parking
LEFT JOIN
    parking_violations AS pv1 ON pv1.ID = parking.v1
LEFT JOIN
    parking_violations AS pv2 ON pv2.ID = parking.v2
LEFT JOIN
    parking_violations AS pv3 ON pv3.ID = parking.v3
LEFT JOIN
    parking_violations AS pv4 ON pv4.ID = parking.v4
WHERE 
    parking.pdid = 5;
于 2018-10-02T04:56:34.557 回答