Выберите записи на основе того, с чего начинается поле? - PullRequest
6 голосов
/ 31 мая 2011

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

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

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"));

Ответы [ 6 ]

14 голосов
/ 31 мая 2011

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

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

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

3 голосов
/ 31 мая 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.

3 голосов
/ 31 мая 2011
    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 LIKE "c*");
1 голос
/ 31 мая 2011

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

  1. Использование оператора LIKE

  2. Использование IN operator

Например:

Person.spineinjuryAdmit LIKE "c*"

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

Подробнее о LIKE см. http://office.microsoft.com/en-us/access-help/like-operator-HP001032253.aspx.

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

0 голосов
/ 04 июля 2017

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

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

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

0 голосов
/ 31 мая 2011

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

....
WHERE spineinjuryAdmit LIKE 'c*'
AND   Patient.FirstName LIKE 'Smith*'
GROUP BY    Person.spineinjuryAdmit,             
            tblComorbidity.comorbidityexplanation;
...