Mysql
 sql >> база данни >  >> RDS >> Mysql

sql таблици за присъединяване, където 1 колона има запетая

Наистина трябва да погледнете Нормализиране на базата данни и първо нормализирайте структурата си, като добавите съединителна таблица и съдържа релация от tablec, всяка релация, съхранена в tablec, ще бъде съхранена в нова съединителна таблица, но не като списък, разделен със запетая, всеки ред ще съдържа id на c и един потребителски id на ред, ако вие не може да промени вашата схема, можете да използвате find_in_set за намиране на стойности в набор

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

Вижте демонстрация

Редактиране за нормализиране на схема

Премахнах userids колона от вашия tblC и вместо това създадох нова съединителна таблица като tblC_user с 2 колони c_id това ще бъде свързано с колоната id на tblC и второ userid за съхраняване на потребителски връзки за tblC вижте примерна схема за 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');

И ето вашата съединителна таблица като 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');

По-горе, ако забележите, не съм съхранил никакви релации, разделени със запетая, всяка релация на потребител за tblC се съхранява в нов ред, за съответния набор от резултати използвах съединителна таблица в присъединяването, също така новата заявка ще бъде като по-долу

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"

Демо 2

Сега заявката по-горе може да бъде оптимизирана чрез използване на индекси, които можете лесно да поддържате каскадни връзки




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Коя SQL заявка е по-добра, MATCH AGAINST или LIKE?

  2. Как да вмъкна NULL в mysql, особено INT dataType

  3. Потребителско име, парола, осоляване, криптиране, хеширане - как работи всичко това?

  4. Има ли някакви реални ползи от използването на RDBMS спрямо плоски файлове в обикновена система за уеб документи (или основна CMS)?

  5. Как да изберете записът съдържа MAX(някое_поле) в рамките на ГРУПА (група по)