2015-04-02 3 views
-1

У меня есть две таблицы:SQL заявление с 3 условия

Name Forename CostCentre 
Max  Meier  11111 
Paul  Peters  22222 
Kai  Green  11111 

CostCentre departmentCostCentre 
11111     HR 
22222     IT 

Помимо этого у меня есть Searchfield и выпадающий для МВЗ.

Если я вхожу «а» в searchfield и «11111» в центре стоимости, я буду получать все записи ...

Но я просто хочу, чтобы Макс и Кай. Вот мой SQL заявление:

SELECT tbl_Employee.Name, tbl_Employee.Forename, tbl_Employee.CostCentre, tbl_Department.Department 
FROM tbl_DepartmentINNER JOIN tbl_EmployeeON tbl_Department.CostCentre= tbl_Employee.CostCentre 
WHERE tbl_Employee.Name Like "*a*" OR tbl_Employee.Forename Like "*a*"AND tbl_Mitarbeiter.CostCentre=44444; 

Я действительно не знаю, где ошибка .... Если удалить имя или Forename состояние он работает нормально, но с обоими я получаю странные результаты ...

+0

В вашем примере все три из них имеют '' содержащее имя было Ā', так что все три должно быть возвращен. При этом ваши образцы данных выглядят неверно (со значениями, которые не похожи на имена в столбце «forename»). –

ответ

1

Если вы хотите МВЗ условие всегда применять и условия имен обратиться к любому из этих имен, то вам нужно использовать круглые скобки:

SELECT * FROM tbl_Employee 
WHERE (tbl_Employee.Name Like 'a' Or 
     tbl_Employee.Forename Like 'a') And 
     tbl_Employee.CostCentre=22222; 

В противном случае, And связывает более тесно, чем Or и вы вместо того, чтобы сказать, что либо условие Name должно соответствовать или что оба Forename и CostCentre условия должны совпадать.

Ваш вопрос уже содержит некоторые круглые скобки в вашем коде, который я удалил. Я не уверен, к чему они относятся.


на основе обновленного запроса:

SELECT tbl_Employee.Name, tbl_Employee.Forename, tbl_Employee.CostCentre, tbl_Department.Department 
FROM tbl_DepartmentINNER JOIN tbl_EmployeeON tbl_Department.CostCentre= tbl_Employee.CostCentre 
WHERE 
    (
     tbl_Employee.Name Like "*a*" 
     OR 
     tbl_Employee.Forename Like "*a*" 
    ) 
    AND 
    tbl_Mitarbeiter.CostCentre=44444; 
+0

thx, но я обновил свою проблему ... – okaisan1

+0

@ okaisan1 - все еще кажется той же проблемой - когда у вас есть комбинация 'OR' и ' AND 'без использования'() 'скобки,' AND 'связывают более жестко, чем' OR 'так без'() 's, вы просите« все, что соответствует «Name» «ИЛИ», что-либо, что соответствует 'Forename' и соответствует' CostCentre' ' –

+0

благодарит вас за подсказки! Я решил свою проблему! – okaisan1

0
SELECT 
    * 
FROM 
    tbl_Employee 
WHERE 
    tbl_Employee.Name LIKE '%a%' 
    AND tbl_Employee.CostCentre = 11111; 
+0

thx, но я обновил свою проблему ... – okaisan1

Смежные вопросы