Mysql получение данных из таблиц с объединением - PullRequest
0 голосов
/ 19 марта 2020

test)

Я создал команду запроса sql для получения данных из этих трех таблиц, эта команда должна помочь пользователю найти курс из входных данных поиска , в этом поисковом вводе он может написать название курса или имя учителя, который опубликовал курс, или ключевые слова курса ... через: название курса (таблица курсов), через имя учителя (таблица пользователя) ), через ключевые слова (таблица motCle

я написал эту команду, но у меня получился неверный результат при запросе по ключевым словам,

SELECT *
FROM cours c
JOIN users u ON u.id= c.userId
WHERE (c.nom LIKE '%name%' OR u.nom LIKE '%name%') OR EXISTS(
SELECT *
FROM cours c
JOIN intermots i ON i.coursId= c.id
JOIN motcles m ON i.motCleId = m.id
WHERE m.nom LIKE '%name%')

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Ваше предложение EXIST не связано. Вы хотите знать, существует ли ключевое слово для строки, которую вы сейчас просматриваете. Удалите таблицу курса из подзапроса и сравните ее со строкой курса основного запроса.

SELECT *
FROM cours c
JOIN users u ON u.id= c.userId
WHERE c.nom LIKE '%name%' 
OR u.nom LIKE '%name%'
OR EXISTS
(
  SELECT *
  FROM intermots i
  JOIN motcles m ON i.motCleId = m.id
  WHERE i.coursId = c.id
  AND m.nom LIKE '%name%'
);

А вот альтернатива с IN (где подзапрос не должен коррелироваться):

SELECT *
FROM cours c
JOIN users u ON u.id= c.userId
WHERE c.nom LIKE '%name%' 
OR u.nom LIKE '%name%'
OR c.id IN
(
  SELECT i.coursId
  FROM intermots i
  WHERE i.motCleId IN 
  (
    SELECT m.id
    FROM motcles m
    WHERE m.nom LIKE '%name%'
  )
);
1 голос
/ 19 марта 2020

Объедините отдельные запросы для каждого совпадения с UNION

-- Match course name
SELECT c.*
FROM cours AS c
WHERE c.nom LIKE '%name%'

UNION
-- Match teacher name
SELECT c.*
FROM cours AS c
JOIN users AS u ON c.userid = u.id
WHERE u.nom LIKE '%name%'

UNION
-- Match keywords
SELECT c.*
FROM cours AS c 
JOIN intermots i ON i.coursId= c.id
JOIN motcles m ON i.motCleId = m.id
WHERE m.nom LIKE '%name%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...