Итак, у меня есть 6 таблиц.Вопрос Sql с выбором данных
Company (1..1) --- (0..n) District
District (1..1) --- (0..n) City
City (1..1) --- (0..n) Employee
Так много от 1 до n отношений, чтобы начать.
Тогда я 1 n..n отношение реализована следующим образом:
Employee (1..1) --- (0..n) EmpLang
EmpLang (0..n) --- (1..1) Lang
Теперь я выбираю Сотрудник вроде этого:
SELECT Employee.Name, Employee.lastName, Employee.PhoneNumber
FROM Company, District, Employee, EmpLang, Lang
WHERE Company.id = District.cid
AND District.id = City.did
AND City.id = Employee.id
AND Company.name LIKE '{1}%'
AND District.name LIKE '{2}%'
AND City.name LIKE '{3}%'
{1}, {2}, {3}
: Некоторые случайные величины (не важно)
Моя проблема в том, что у меня есть другая переменная ({4}
), которая является языком фильтром.
Если это пусто, я просто хочу, чтобы этот запрос, как указано выше, выполнялся. (Или те же результаты, по крайней мере.)
Если у него есть что-то в нем:
- Я хочу, чтобы фильтровать, ища отношений в последней таблице (языки),
...
AND City.name LIKE '{3}%'
AND Employee.id = EmpLang.eid
AND EmpLang.lid = Lang.id
AND Lang.desc LIKE '{4}%'
- Кроме того, я не хочу для отображения результатов дважды, если человек знает 2 lang's. Поэтому, если человек знает английский и эдуардский, а фильтр «e%», я хочу только один раз отобразить результат.
Я хотел бы сделать это исключительно в mysql.
Пожалуйста, разместите данные реальных образцов и результат выборки. Если человек знает> 1 'Lang', но вам нужен только один результат, какой он должен быть? –
Wel, если языковой фильтр, например: 'e%', и человек знает английский и эдуардский, я просто хотел бы снова подтвердить SELECT Employee.name, Employee.lastName, Employee.phoneNumber. К сожалению, я не могу, потому что не могу придумать способ написать этот код :( – user3152069
О, ну, в приведенном выше описании вы должны удалить 'EmpLang, Lang' из списка SELECT, если вы действительно не хотите они в результатах. –