Đây là kịch bản. Cách sử dụng REGEXP
để mô phỏng toán tử IN
chưa đến khớp với tất cả các giá trị ở phía bên trái bên phải bất kể thứ tự chuỗi ở hai bên. Ngoài ra, giải pháp ANSI SQL
có thể đạt được bằng cách sử dụng các truy vấn bên trái và phụ.REGEXP để khớp với một chuỗi nhóm trong một danh sách nhóm khác bất kể thứ tự - SQL
bảng mẫu:
Parent table, Child table, Parent_Child
. Để không chiếm nhiều không gian hơn trong câu hỏi, tôi chỉ đăng ở đây một lần nữa là Group_Concat Child query by Parent
.
PID NAME CHILDREN
1 dad john dave,jill,lina
2 mum sandy maryam,jack
3 dad frank henry,jill
4 mum kate maryam
5 mum jean dave
Dự kiến kết quả: Chọn Chánh người có tất cả con cái của họ tham gia vào một cái gì đó.
PID NAME CHILDRENREXGEX
3 dad frank jill,henry
4 mum kate maryam
5 mum jean dave
Đây là giải pháp SQL REGEXP: bây giờ là vấn đề ở đây, nó không trả về kết quả chính xác nếu bên trái/thứ tự không phù hợp với bên phải.
Query:
select
x.pid, x.name, x.children as childrenRexgex
from
(select
p.pid, p.name, group_concat(c.name) as children
from
parent as p
inner join
parent_child as pc on p.pid = pc.pid
join
child as c on pc.cid = c.cid
group by
p.pid
order by
c.name) as x
where
'dave,maryam,jill,henry' REGEXP x.children
;
Do đó có hai khía cạnh tôi sẽ đánh giá cao cho câu hỏi:
- mô hình tốt nhất để phù hợp với tất cả các tên ở bên trái để người dùng định nghĩa danh sách bên phải là gì bên bất kể thứ tự?
- Hiệu suất có thể đạt được bằng cách sử dụng
REGEXP
là gì?
Vấn đề thực sự ở đây là trẻ em không nên là cột được phân cách bằng dấu phẩy, nhưng phải là một bảng chi tiết. Xem câu hỏi này: [Lưu trữ một danh sách phân tách trong một cột cơ sở dữ liệu thực sự là xấu?] (Http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column- thực sự-đó-xấu) –