Giả sử truy vấn con của bạn đã nhận lại giá trị chính xác và bạn chỉ hỏi cách lấy cả hai giá trị 'article' trong cùng một cột, tất cả những gì bạn cần làm là chuyển truy vấn con thành when
thứ hai kiểm tra trong case
đầu tiên biểu thức, thay vì là cột riêng của nó:
SELECT
tbl.parent,
list.list_value,
tbl.values_column,
CASE
WHEN list.list_value = 'Article' THEN tbl.values_column
WHEN list.list_value = 'Paragraph' THEN (
SELECT
values_column
FROM
pro_table
WHERE
pro_table.id_pro_table = tbl.parent
)
END AS article,
CASE
WHEN list.list_value = 'Paragraph' THEN tbl.values_column
END AS paragraph
FROM
pro_table tbl
LEFT JOIN list ON list.id_list = tbl.id_t_list
Bạn có thể thay thế truy vấn con bằng một phép nối bên trái trở lại cùng một bảng và kết hợp các kết quả:
SELECT
tbl.parent,
list.list_value,
tbl.values_column,
COALESCE (
CASE
WHEN list.list_value = 'Article' THEN tbl.values_column
END,
tbl2.values_column
) AS article,
CASE
WHEN list.list_value = 'Paragraph' THEN tbl.values_column
END AS paragraph
FROM
pro_table tbl
LEFT JOIN list ON list.id_list = tbl.id_t_list
LEFT JOIN pro_table tbl2 ON tbl2.id_pro_table = tbl.parent
... nhưng đó là đưa ra một số giả định về hệ thống phân cấp, vì vậy bạn có thể cần thắt chặt việc liên kết dựa trên loại danh sách.
db <> fiddle với các mối quan hệ được phát minh giữa sáu hàng giống như bạn đã hiển thị, vì chúng tôi không có ID thực tế.