我有以下 2 個表并嘗試遞回查詢。下面是給我一個錯誤的表格和查詢。
CREATE TABLE tags (
tag_id INTEGER,
tag_name VARCHAR(50) NOT NULL,
tag_descrip VARCHAR(200),
tag VARCHAR(200) NOT NULL,
CONSTRAINT tags_pk PRIMARY KEY (tag_id )
);
CREATE TABLE tag_tree (
tag_id INTEGER,
parent_tag_id INTEGER,
CONSTRAINT tag_tree_pk UNIQUE (tag_id, parent_tag_id),
CONSTRAINT tag_tree_tags_fk FOREIGN KEY (tag_id)
REFERENCES tags(tag_id),
CONSTRAINT parent_tag_tags FOREIGN KEY (parent_tag_id)
REFERENCES tags(tag_id),
CONSTRAINT parent_tag_tag_tree_fk FOREIGN KEY (parent_tag_id)
REFERENCES tag_tree(tag_id)
);
WITH RECURSIVE tags_and_their_parents (
tag_id,
parent_tag_id,
depth)
AS (
SELECT tag_id,
parent_tag_id,
parent_tag_id,
0 AS depth
FROM tag_tree
WHERE parent_tag_id IS NULL
UNION ALL
SELECT tag_tree.tag_id,
tag_tree.parent_tag_id,
tags_and_their_parents.tag_id,
tags_and_their_parents.depth 1
FROM tag_tree
INNER JOIN tags_and_their_parents
ON tag_tree.parent_tag_id = tags_and_their_parents.tag_id
)
SELECT * FROM tags_and_their_parents
ORDER BY depth;
錯誤:
您的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本相對應的手冊,以在第 18 行的 '' 附近使用正確的語法(第 18 行是 INNER JOIN)。
我遵循了另一篇文章中的確切語法(如何創建 MySQL 分層遞回查詢?),所以我無法弄清楚我哪里出錯了。任何幫助將不勝感激!
uj5u.com熱心網友回復:
您的鏈接專案在其查詢的三個部分中恰好顯示三列。但是你在這里有三列......
WITH RECURSIVE tags_and_their_parents (
tag_id,
parent_tag_id,
depth)
AS ( ...
這里有四列...
SELECT tag_id,
parent_tag_id,
parent_tag_id,
0 AS depth
和這里
SELECT tag_tree.tag_id,
tag_tree.parent_tag_id,
tags_and_their_parents.tag_id,
tags_and_their_parents.depth 1
洗掉額外的列可以修復您的語法錯誤小提琴。
WITH RECURSIVE tags_and_their_parents (
tag_id,
parent_tag_id,
depth)
AS (
SELECT tag_id,
parent_tag_id,
-- parent_tag_id,
0 AS depth
FROM tag_tree
WHERE parent_tag_id IS NULL
UNION ALL
SELECT tag_tree.tag_id,
tag_tree.parent_tag_id,
--- tags_and_their_parents.tag_id,
tags_and_their_parents.depth 1
FROM tag_tree
INNER JOIN tags_and_their_parents
ON tag_tree.parent_tag_id = tags_and_their_parents.tag_id
您可能希望像這樣為第四列賦予其自己的名稱(ancestor_tag_id也許?)。小提琴
WITH RECURSIVE tags_and_their_parents (
tag_id,
parent_tag_id,
ancestor_tag_id, -- ADDED
depth)
AS (
SELECT tag_id,
parent_tag_id,
parent_tag_id ancestor_tag_id, --CHANGED
0 AS depth
FROM tag_tree
WHERE parent_tag_id IS NULL
UNION ALL
SELECT tag_tree.tag_id,
tag_tree.parent_tag_id,
tags_and_their_parents.tag_id ancestor_tag_id, --CHANGED
tags_and_their_parents.depth 1
FROM tag_tree
INNER JOIN tags_and_their_parents
這些遞回 CTE 的語法錯誤報告令人抓狂且毫無用處,是嗎?:-)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/453100.html
標籤:mysql sql 递归查询 mysql-错误-1064
上一篇:更改列的值順序
