2014-12-18 4 views
0

У меня есть таблица состояний, которая содержит RECID, instituitionid, имя файла, статус и т.д.SQL сервер ВЫБРАТЬ пункт в ИНЕКЕ

RECID является первичным ключом и будет уникальным.

Я хочу, чтобы запрос, в котором все строки выбраны из таблицы с определенным instituitionid и filename. Проблема в том, что у меня есть только recid как вход &, 2 значения параметров будут такими же, как значения, которые являются значениями recid, которые у меня есть.

Было бы что-то вроде

SELECT * FROM Status 
WHERE instituitionid = (SELECT instituitionid FROM Status WHERE recid = recid) 
AND filename = (SELECT filename FROM Status WHERE recid = recid) 

Хотя я уверен, что многие PPL попросил бы это, я не мог найти синтаксис для этого из моего поиска.

Пожалуйста, помогите :)

ответ

1

Есть много способов сделать это: вот еще:

SELECT * 
FROM Status s 
WHERE EXISTS (
    SELECT 1 
    FROM Status s2 
    WHERE s.institutionid = s2.institutionid 
     AND s.filename = s2.filename 
     AND s2.recid = @recid 

) 

Так вы говорите, что значение recid, я лечение, что в качестве параметра.

Это преимущество состоит в том, чтобы сделать только один подзапрос.

+0

Спасибо Ann! Работает как шарм :) – Playmaker

4

Вы близко! Попробуйте это:

SELECT * 
FROM STATUS 
WHERE instituitionid IN (
     SELECT instituitionid 
     FROM STATUS 
     WHERE recid = recid 
     ) 
    AND filename IN (
     SELECT filename 
     FROM STATUS 
     WHERE recid = recid 
     ) 
+0

Благодаря Рокки. Я ожидаю, что запрос внутреннего выбора вернет единый instituitionid & filename. Для этого понадобилось бы ИНО? На самом деле я не был уверен, что мой запрос был даже прав, и просто написал его как логический пример того, что я хочу. Любой способ упростить код ?! (Мне действительно нужно написать 2 внутренних выбора, которые в основном просто возвращают разные столбцы одного и того же набора результатов?) – Playmaker

+0

Вы можете использовать «=» вместо «IN», так как будет возвращена 1 строка, но вам не нужно @ Где-то там где-то? – JBrooks

2

Это даст вам все из них, включая, где b.recid = @recid

SELECT b.* 
FROM Status AS a 
INNER JOIN Status AS b 
ON a.instituitionid = b.instituitionid 
AND a.filename = b.filename 
WHERE a.recid = @recid 
+0

Ответы обоих и @Ann L. работают как шарм. Большое спасибо. Любая идея, по которой будет лучше работать с мудрым/меньшим ресурсом? – Playmaker

+0

Я собираюсь угадать мое, или что они будут такими же. Вы можете добавить эти 3 строки и сообщить нам: declare @@ starttime datetime; set @@ starttime = getdate(); --RUN SQL ЗДЕСЬ; выберите dateiff (MILLISECOND, @@ starttime, getdate()) (используйте одиночный знак, stackoverflow принимает один как «у пользователя», – JBrooks

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