2014-04-08 5 views
1

Я делаю базу данных для медицинского центра. В моем случае мне нужно получить данные, используя 2 таблицы. У меня есть 2 таблицы с именем Consultation и Channeling. В моем случае, когда пациент разместит новое Channeling, он автоматически добавит в таблицу консультаций. Затем, когда пациент сделал свою консультацию, эта консультационная запись будет удалена. Но запись Channeling не удаляется (согласно бизнес-кейсу). Мне нужно забрать записи из Channeling записей, которые Не существует в таблице Consultation. Я пытался с этим,Как получить данные из 2-х таблиц, используя в mysql?

SELECT c.* FROM Channeling c, Consultation cn WHERE c.cid!=cn.cid 

cid является первичным ключом Channeling таблицы. Это внешний ключ Consultation. Когда я использую этот запрос, у меня есть 700 + записей. Но в моей таблице Channelin содержится всего 75 записей. Как я могу это сделать. Является ли это возможным? Я использую базу данных mysql.

Спасибо заранее!

ответ

0

Рассмотрите ваш запрос как декартова продукт, отфильтрованный по предложению WHERE. Таким образом, это походит на получение 75 х Consultation records count записи, а затем отбросить все те комбинации, где

c.cid=cn.cid 

Вот почему вы получите больше элементов, чем Channelin имеет.

Чтобы получить то, что вы хотите, вы можете попробовать:

SELECT c.* FROM Channeling c WHERE 0 = (SELECT COUNT(1) FROM Consultation cn WHERE cn.cid=c.cid); 

Или:

SELECT c.* FROM Channeling c WHERE c.id NOT IN (SELECT DISTINCT cn.id FROM Consultation cn); 

Это не то же самое:

Чтобы выбрать все комбинации каналирования и консультации элементы с разными идентификаторами

Чем:

Чтобы выбрать все элементы из Ченнелинга не присутствуя на консультации

0

Вы выберите все возможные комбинации консультаций и ченнелинг, а затем отфильтровывать те с тем же ID.

попробовать что-то вроде этого:

SELECT * FROM Channeling WHERE cid NOT IN (SELECT cid FROM Consultation) 
0

вы делаете декартово произведение двух таблиц, а затем выберите записи, которые имеют состояние c.cid=cn.cid. Вы можете сделать это, оставив соединение двух таблиц. Это приведет к возврату всех записей канала, а затем выберите записи, у которых есть столбец идентификатора консультанта null. Нравится

SELECT c.* 
FROM Channeling c 
LEFT JOIN Consultation cn 
ON c.cid = cn.cid 
WHERE cn.cid IS NULL 
Смежные вопросы