2012-01-12 26 views
24

trong schema MySQL của tôi, tôi có bảng category(id, parentid, name)Làm thế nào để chuyển đổi một truy vấn CTE MSSQL sang MySQL?

Trong MSSQL, tôi có mà CTE truy vấn (để xây dựng một cây loại từ dưới lên cho một thể loại ID cung cấp:

with CTE (id, pid, name) 
as 
(
    select id, parentid as pid,name 
    from category 
    where id = 197 
     union all 
     select CTE.pid as id , category.parentid as pid, category.name 
     from CTE 
      inner join category 
      on category.id = CTE.pid 
) 
select * from CTE 

Làm thế nào để 'biến đổi' truy vấn đó thành MySQL?

Trả lời

32

Thật không may là MySQL không hỗ trợ CTE (Biểu thức bảng chung) .Đây là IMO quá hạn dài, thường bạn chỉ cần sử dụng truy vấn con, nhưng CTE cụ thể này là đệ quy: nó đề cập đến chính nó trong hàng đợi ry. CTE đệ quy là cực kỳ hữu ích cho dữ liệu phân cấp, nhưng một lần nữa: MySql không hỗ trợ chúng cả. Bạn phải thực hiện một thủ tục được lưu trữ để có được kết quả tương tự.

Một câu trả lời trước của tôi nên cung cấp một điểm khởi đầu tốt đẹp:

Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)

+0

Tôi nghĩ đó là tất cả những gì tôi muốn, cảm ơn nhiều :) – Tony

+0

@ f00, vậy họ có bao giờ triển khai không? Hay là câu trả lời "không bao giờ"? – Pacerier

-2

Rất may nó không cần thiết nữa, như MySQL bắt đầu từ 8.0.1supports CTE.

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ review/low-quality-posts/16938206) – Jonathan

+0

@ Jonathan Nhưng nó trả lời câu hỏi :) –

+0

@KubaOber Bạn nói đúng - có lẽ tôi đã đánh dấu nó có câu trả lời chỉ liên kết thay thế. Bạn thực sự nên thêm một số mã để giải thích cách thức hoạt động này thay vì chỉ liên kết đến một trang web. Bằng cách này, nó ít có khả năng bị gắn cờ và bỏ phiếu. Một khi bạn đã làm điều đó, để lại một bình luận và tôi sẽ rút lại bình luận của tôi. – Jonathan