Выбирать записи на основе того, с чего начинается поле?

У меня есть база данных с таблицей с идентификаторами c1, c2, c3..etc..

Вместо того, чтобы писать запрос, в котором есть куча OR, как я могу изменить приведенный ниже запрос чем-то, что будет перехватывать все записи, начинающиеся с определенной буквы?

SELECT 
    Person.spineinjuryAdmit, 
    tblComorbidity.comorbidityexplanation,
    Count(tblComorbidity.comorbidityexplanation) AS CountOfcomorbidityexplanation

FROM tblKentuckyCounties 
INNER JOIN (tblComorbidity 
            INNER JOIN (Person 
                        INNER JOIN tblComorbidityPerson 
                            ON Person.PersonID = tblComorbidityPerson.personID) 
                ON tblComorbidity.ID = tblComorbidityPerson.comorbidityFK) 
    ON tblKentuckyCounties.ID = Person.County
GROUP BY    Person.spineinjuryAdmit, 
            tblComorbidity.comorbidityexplanation
HAVING (((Person.spineinjuryAdmit)="c1" Or 
         (Person.spineinjuryAdmit)="c2" Or 
         (Person.spineinjuryAdmit)="c3"));

person dzilla    schedule 31.05.2011    source источник
comment
Я не уверен, что вы предпочитаете делать это именно так, но мне нравится создавать операторы соединения следующим образом: FROM tblKentuckyCounties k JOIN Person p ON p.County = k.ID JOIN tblComorbidityPerson cp ON cp.personID = p.PersonID JOIN tblComorbidity c ON c.ID = cp.comorbidityFK   -  person Calvin Fisher    schedule 01.06.2011


Ответы (6)


Вы пробовали использовать LIKE? В качестве примера:

SELECT * FROM patients WHERE lastName LIKE 'm%';

Это вернет записи, в которых patients.lastName начинается с «m». Символ «%» может быть «*» для доступа, я не могу вспомнить. В некоторых базах данных вы также можете использовать '_', который будет соответствовать одному символу (или любому количеству знаков подчеркивания, которые вы добавите).

person Rob    schedule 31.05.2011
comment
я пытался использовать подстановочный знак%, но изначально я сделал это неправильно, поэтому я пришел к SO за помощью. - person dzilla; 31.05.2011
comment
Традиционные подстановочные знаки Access (Jet/ACE) — это * и ?, использующие режим SQL по умолчанию ANSI 89 (который является собственностью Access). % и _ — это ANSI 92 SQL, и вы можете запускать Access в режиме ANSI 92 SQL, но я бы не рекомендовал его (это ломает многие вещи в приложении, созданном в режиме ANSI 89). В качестве альтернативы, если вы хотите использовать подстановочные знаки ANSI 92, вы можете использовать проприетарный оператор ALIKE или запустить свой SQL с помощью OLEDB/ADO, который по умолчанию использует режим ANSI 92 (DAO использует ANSI 89). - person David-W-Fenton; 03.06.2011

Вы можете использовать предложение WHERE, чтобы исключить строки, которые вам не нужны, перед выполнением GROUP BY.

SELECT 
    p.spineinjuryAdmit, 
    c.comorbidityexplanation,
    Count(c.comorbidityexplanation) AS CountOfcomorbidityexplanation
FROM tblKentuckyCounties AS k
INNER JOIN (tblComorbidity AS c
            INNER JOIN (Person AS p
                        INNER JOIN tblComorbidityPerson AS cp
                            ON p.PersonID = cp.personID) 
                ON c.ID = cp.comorbidityFK) 
    ON k.ID = p.County
WHERE p.spineinjuryAdmit ALike "c%"
GROUP BY    p.spineinjuryAdmit, 
            c.comorbidityexplanation

Если ваш запрос выполняется в режиме SQL-89, вы можете использовать это как предложение WHERE.

WHERE p.spineinjuryAdmit Like "c*"

В режиме SQL-92 вам потребуется стандартный подстановочный знак ANSI.

WHERE p.spineinjuryAdmit Like "c%"

Я использовал ALike, чтобы указать механизму базы данных ожидать подстановочные знаки ANSI.

Режим SQL-89 используется DAO ... если вы не установили параметр базы данных для использования режима SQL-92 (синтаксис, совместимый с SQL Server).

Если вы выполняете запрос с помощью ADO, он всегда будет использовать режим SQL-92.

person HansUp    schedule 31.05.2011

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

SELECT * FROM table WHERE column REGEXP '^[ c1, c2, c3]';

Этот запрос вернет все строки, в которых столбец начинается с «c1», «c2» или «c3».

person thodoris    schedule 03.07.2017

У вас есть два варианта:

  1. Используйте оператор LIKE.

  2. Используйте оператор IN.

Например:

Person.spineinjuryAdmit LIKE "c*"

Person.spineinjuryAdmit IN ("c1", "c2", "c3")

См. http://office.microsoft.com/en-us/access-help/like-operator-HP001032253.aspx для получения подробной информации о LIKE.

Справедливое предупреждение: подстановочные знаки LIKE в Access — это * и ? вместо % и _ (как в случае с большинством других версий SQL).

person rskar    schedule 31.05.2011

Вы можете изменить это, чтобы включить список фильтров в предложение WHERE. Далее будут найдены пациенты, чья фамилия начинается с Smith. (т.е. Smith и Smithson и т. д.), а также те, чьи Admit начинаются с c.

....
WHERE spineinjuryAdmit LIKE 'c*'
AND   Patient.FirstName LIKE 'Smith*'
GROUP BY    Person.spineinjuryAdmit,             
            tblComorbidity.comorbidityexplanation;
person p.campbell    schedule 31.05.2011

person    schedule
comment
примет, как только мне позволят. Я подумал, что спросить ТАК будет быстрее, чем гуглить. Благодарность :) - person dzilla; 31.05.2011