我要进行查询,其中联接可以访问父数据。 我有这个:
SELECT *
FROM tbl_quart q
INNER JOIN tbl_poste_horaire ph ON ph.tbl_quart_id = q.id
INNER JOIN tbl_poste_horaire_caserne phc ON phc.tbl_poste_horaire_id = ph.id
INNER JOIN (
SELECT DISTINCT q1.id,
IF(q1.heureDebut>CURTIME(),ADDTIME(q1.heureDebut,'24:00:00'),
IF(q1.heureFin<CURTIME(),ADDTIME(q1.heureDebut,'48:00:00'),q1.heureDebut)) AS heureTri
FROM tbl_poste_horaire_caserne phc1
INNER JOIN tbl_poste_horaire ph1 ON ph1.id = phc1.tbl_poste_horaire_id
INNER JOIN tbl_quart q1 ON q1.id = ph1.tbl_quart_id
WHERE phc1.tbl_caserne_id = phc.tbl_caserne_id
ORDER BY phc1.tbl_caserne_id, heureTri
LIMIT 2
) AS quartValide ON quartValide.id = q.id
WHERE phc.tbl_caserne_id IN (1,9)
但是这个请求给了我:
Error Code: 1054
Unknown column 'phc.tbl_caserne_id' in 'where clause'
该行的错误是:
WHERE phc1.tbl_caserne_id = phc.tbl_caserne_id
我也试过这个:
SELECT *
FROM tbl_quart q
INNER JOIN tbl_poste_horaire ph ON ph.tbl_quart_id = q.id
INNER JOIN tbl_poste_horaire_caserne phc ON phc.tbl_poste_horaire_id = ph.id
WHERE phc.tbl_caserne_id IN (1,9) AND q.id IN ( SELECT DISTINCT q1.id,
IF(q1.heureDebut>CURTIME(),ADDTIME(q1.heureDebut,'24:00:00'),
IF(q1.heureFin<CURTIME(),ADDTIME(q1.heureDebut,'48:00:00'),q1.heureDebut)) AS heureTri
FROM tbl_poste_horaire_caserne phc1
INNER JOIN tbl_poste_horaire ph1 ON ph1.id = phc1.tbl_poste_horaire_id
INNER JOIN tbl_quart q1 ON q1.id = ph1.tbl_quart_id
WHERE phc1.tbl_caserne_id = phc.tbl_caserne_id
ORDER BY phc1.tbl_caserne_id, heureTri
LIMIT 2
)
我也有错误:
Error Code: 1235
This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
感谢您的帮助:)
答案 0 :(得分:0)
尝试这种方式:
SELECT *
FROM tbl_quart q
INNER JOIN tbl_poste_horaire ph ON ph.tbl_quart_id = q.id
INNER JOIN tbl_poste_horaire_caserne phc ON phc.tbl_poste_horaire_id = ph.id
INNER JOIN (
SELECT DISTINCT q1.id,
phc1.tbl_caserne_id
IF(q1.heureDebut>CURTIME(),ADDTIME(q1.heureDebut,'24:00:00'),
IF(q1.heureFin<CURTIME(),ADDTIME(q1.heureDebut,'48:00:00'),q1.heureDebut)) AS heureTri
FROM tbl_poste_horaire_caserne phc1
INNER JOIN tbl_poste_horaire ph1 ON ph1.id = phc1.tbl_poste_horaire_id
INNER JOIN tbl_quart q1 ON q1.id = ph1.tbl_quart_id
ORDER BY phc1.tbl_caserne_id, heureTri
LIMIT 2
) AS quartValide
ON quartValide.id = q.id AND quartValide.tbl_caserne_id = phc.tbl_caserne_id
WHERE phc.tbl_caserne_id IN (1,9)
但重构这个查询会更好......给我一点时间,我想我们可以简化它。
看起来你稍微过度完成了查询。试试这个并告诉我结果有什么问题?
SELECT DISTINCT q.*,
ph.*,
phc.*,
IF(q.heureDebut>CURTIME(),ADDTIME(q.heureDebut,'24:00:00'),
IF(q.heureFin<CURTIME(),ADDTIME(q.heureDebut,'48:00:00'),q.heureDebut)) AS heureTri
FROM tbl_poste_horaire_caserne phc
INNER JOIN tbl_poste_horaire ph
ON ph.id = phc.tbl_poste_horaire_id
INNER JOIN tbl_quart q
ON q.id = ph.tbl_quart_id
WHERE phc.tbl_caserne_id IN (1,9)
ORDER BY phc.tbl_caserne_id, heureTri
LIMIT 2