Я шукав і не можу знайти відповідь на те, що намагаюся зробити. Я не знаю, чи можна створити запит наступним чином.
$sql_call = "SELECT table.item,table.item,table.item FROM cust
LEFT JOIN contact ON cust.id = contact.client_id
LEFT JOIN survey_audit ON cust.id = survey_audit.cust_id
WHERE cust.clinic="$clinic_id" AND contact.participate="1" AND survey_audit.survey_id != "$post_survey_id"";
Вищенаведений запит не робить те, що я намагаюся зробити, і це:
Отримати дані з таблиць, де cust.clinic = щось І contact.participate = щось І (це частина, в якій я не впевнений) всередині таблиці Survey_audit, немає рядка з цим ідентифікатором.
Чи можна запитати sql, щоб знайти результат, де щось = щось І не є рядком у певній таблиці?
Відповіді:
1 для відповіді № 1Ви начебто на правильному шляху. Вам просто потрібно шукати випадки, коли survey_audit.survey_id
є NULL.
SELECT table.item,table.item,table.item
FROM cust
LEFT JOIN contact
ON cust.id = contact.client_id
LEFT JOIN survey_audit
ON cust.id = survey_audit.cust_id
WHERE cust.clinic="$clinic_id"
AND contact.participate="1"
AND survey_audit.survey_id IS NULL
Ось дуже корисний ресурс, який допоможе вам визначити, як формувати складніші сценарії приєднання. Ваш випадок є четвертим прикладом на цій сторінці.
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
0 для відповіді № 2
Ви можете виключити всі елементи таблиці, використовуючи підзапит:
$sql_call = "SELECT table.item,table.item,table.item FROM cust
LEFT JOIN contact ON cust.id = contact.client_id
LEFT JOIN survey_audit ON cust.id = survey_audit.cust_id
WHERE cust.clinic="$clinic_id" AND contact.participate="1" AND survey_audit.survey_id NOT IN (SELECT survey_id FROM Survey_audit);
0 для відповіді № 3
Так, можливо, ви повинні прочитати більше про інші типи приєднань у mysql Є 4 типи приєднань
INNER JOIN
(ПРИЄДНАЙТЕСЬ) - відповідність ідентифікаторів в обох таблицяхLEFT JOIN
- збіг ідентифікатора в таблиці A і може бути нульовим у таблиці BRIGHT JOIN
- збіг ідентифікатора в таблиці B і може бути нульовою таблицею AOUTER JOIN
- може бути нульовим в обох таблицях
Рекомендую прочитати наступну статтю http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Отже, для вашого питання я вважаю ви повинні використовувати RIGHT JOIN survey_audit
замість LEFT JOIN survey_audit