【发布时间】:2019-12-06 22:06:03
【问题描述】:
我想加入四个表,我写了很多可能的方式,但我得到了一个未知列的错误,我不明白出了什么问题。
这是我写的:
SELECT
kursai.pavadinimas,
destytojai.vardas AS d_vardas,
destytojai.pavarde AS d_pav,
vartotojai.vardas AS v_vardas,
vartotojai.pavarde AS v_pav
FROM
kursai,
(
vartotojai,
(
destytojai
LEFT JOIN
pasirinkti_kursai AS p1 ON destytojai.vardas = p1.destytojas_id
LEFT JOIN
pasirinkti_kursai AS p2 ON destytojai.pavarde = p2.destytojas_id
)
LEFT JOIN
pasirinkti_kursai AS p3 ON vartotojai.vardas = p3.vartotojas_id
LEFT JOIN
pasirinkti_kursai AS p4 ON vartotojai.pavarde = p4.vartotojas_id
)
LEFT JOIN
pasirinkti_kursai AS p0 ON kursai.pavadinimas = p0.kursas_id
你能告诉我应该如何编写代码吗?这是我第一次写 SQL 代码,我不知道该做什么了 :(
更新:
这些其他表格应该是这样的:
CREATE TABLE `vartotojai`
`elpastas` varchar(30) NOT NULL,
`slaptazodis` varchar(20) NOT NULL,
`vardas` varchar(20) NOT NULL,
`pavarde` varchar(30) NOT NULL,
`gimimo_data` date NOT NULL,
`id` int(5) NOT NULL
CREATE TABLE `destytojai`
`id` int(5) NOT NULL,
`vardas` varchar(20) NOT NULL,
`pavarde` varchar(30) NOT NULL
CREATE TABLE `kursai` (
`id` int(5) NOT NULL,
`pavadinimas` varchar(3) CHARACTER SET latin1 NOT NULL,
`aprasas` text CHARACTER SET latin1 NOT NULL,
`laikas` date NOT NULL,
`kaina_teor` decimal(5,2) NOT NULL,
`kaina_prak` decimal(5,2) NOT NULL,
`kaina_abu` decimal(6,2) NOT NULL,
`vietu_sk` int(3) NOT NULL,
`teor_val` int(3) NOT NULL,
`prakt_val` int(3) NOT NULL,
`foto_url` varchar(1000) COLLATE utf16_lithuanian_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_lithuanian_ci;
CREATE TABLE `pasirinkti_kursai` (
`kursas_id` int(5) NOT NULL,
`destytojas_id` int(5) NOT NULL,
`vartotojas_id` int(5) NOT NULL,
`id` int(5) NOT NULL,
`kaina` decimal(7,0) NOT NULL,
`patvirtinta` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
【问题讨论】:
-
如果要连接三个表,为什么查询有五个
left joins?通常两个就足够了。 -
正如我所提到的,这是我第一次编写 SQL 代码,所以我不知道该使用什么
-
@GordonLinoff 你能告诉我怎么写吗?因为我尝试使用较少的“左连接”,但又遇到了另一个错误
-
@AliG.:请以表格文本的形式向我们展示这三个表格中的示例数据以及您的预期结果,以便有人可以提供解决方案。
-
这能回答你的问题吗? Mixing implicit and explicit JOINs