Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

sql tham gia các bảng trong đó 1 cột có dấu phẩy

Bạn thực sự nên xem xét Chuẩn hóa cơ sở dữ liệu và đầu tiên chuẩn hóa cấu trúc của bạn bằng cách thêm một bảng nối và giữ một quan hệ từ tablec mỗi quan hệ được lưu trữ trong tablec sẽ được lưu trữ trong bảng nối mới nhưng không phải là danh sách được phân tách bằng dấu phẩy, mỗi hàng sẽ giữ id của c và một id người dùng trên mỗi hàng, nếu bạn không thể thay đổi giản đồ của bạn, bạn có thể sử dụng find_in_set để tìm các giá trị trong tập hợp

select *  
from  tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"

Xem bản trình diễn

Chỉnh sửa để chuẩn hóa giản đồ

Tôi đã xóa userids từ tblC của bạn và thay vào đó, tôi đã tạo một bảng nối mới với tên tblC_user với 2 cột c_id điều này sẽ liên quan đến cột id của tblC và cái thứ hai userid để lưu trữ người dùng quan hệ người dùng cho tblC xem lược đồ mẫu cho tblC

CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
nname varchar(255),
 PRIMARY KEY (id)
);

INSERT INTO tblC (id, nname) VALUES
('1', 'new1'),
('2', 'new2'),
('3', 'new3'),
('4', 'new4'),
('5', 'new5');

Và đây là bảng nối của bạn là tblC_user

CREATE TABLE if not exists tblC_user
(
 c_id int,
 userid int
);

INSERT INTO tblC_user (c_id,userid) VALUES
('1','1'),
('1','2'),
('2','1'),
('2','3'),
('3','1'),
('3','4'),
('4','3'),
('4','2'),
('5','5'),
('5','2');

Ở trên, nếu bạn nhận thấy, tôi đã không lưu trữ bất kỳ quan hệ nào được phân tách bằng dấu phẩy mỗi quan hệ của người dùng cho tblC được lưu trữ trong hàng mới, đối với bạn có liên quan tập kết quả tôi đã sử dụng bảng nối khi tham gia cũng truy vấn mới sẽ giống như bên dưới

select *  
from  tblC c
join tblC_user cu on(c.id = cu.c_id)
join tblB b on (b.userid = cu.userid)
where c.nname="new1"

Demo 2

Giờ đây, truy vấn trên có thể được tối ưu hóa bằng cách sử dụng các chỉ mục, bạn có thể duy trì các quan hệ xếp tầng một cách dễ dàng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nối các bảng và chuyển đổi các cột và hàng

  2. Đưa các truy vấn SQL ra màn hình trong Laravel

  3. MySQL:trả về các hàng đã cập nhật

  4. Hibernate @OneToMany ném MySQLSyntaxErrorException:Bạn có lỗi trong cú pháp SQL của mình

  5. Làm cách nào tôi có thể sử dụng MySQL Errcode 13 với CHỌN VÀO OUTFILE?