Как выбрать несколько строк с одинаковым условием столбца - PullRequest
0 голосов
/ 21 марта 2019

Как выбрать несколько строк с одинаковыми условиями столбца?

Name    Plat
 Bob       1
 Kay       2
 Sih       3

У меня есть эти два параметра, Боб и Кей.Поэтому мне нужно восстановить записи Боба и Кея.Если Боб или Кей не существует в таблице, вернуть пусто.Если Боб и Кей существуют в таблице, покажите две записи.

sql ниже не работает для меня

Select * from table where Name = 'Bob' And Name = 'Kay'

Любая помощь?

Ответы [ 4 ]

2 голосов
/ 21 марта 2019

Вы можете попробовать использовать exists с HAVING функцией агрегирования условий.

CREATE TABLE T(
   Name VARCHAR(5),
   Plat int
);

INSERT INTO T VALUES ('Bob',1);
INSERT INTO T VALUES ('Kay',2);
INSERT INTO T VALUES ('Sih',3);
INSERT INTO T VALUES ('Sih',4);
INSERT INTO T VALUES ('Bob1',1);

Запрос 1 :

SELECT *
FROM T t1
WHERE exists(
  SELECT 1
  FROM T tt
  WHERE t1.Name in ('Bob','Sih')
  HAVING 
      SUM(CASE WHEN Name = 'Bob' THEN 1 END) > 0
  AND
      SUM(CASE WHEN Name = 'Sih' THEN 1 END) > 0
)

Результаты :

| NAME | PLAT |
|------|------|
|  Bob |    1 |
|  Sih |    3 |
|  Sih |    4 |
1 голос
/ 21 марта 2019

Это предполагает, что Боб и Кей уникальны в таблице

  Select * from table 
   where Name IN ('Bob', 'Kay') 
     and ( select count(*) from table where Name IN ('Bob', 'Kay')) = 2
0 голосов
/ 21 марта 2019

Я бы использовал временные таблицы для выполнения этой операции, что-то вроде этого:

DECLARE @First NVARCHAR(50) = 'Bob';
DECLARE @Last NVARCHAR(50) = 'Kay';

SELECT *
INTO #TempSearch
FROM table
WHERE (Name = @First OR Name = @Last)

SELECT
    COUNT(*) AS Total,
    (SELECT COUNT(a.Name) FROM table AS a WHERE Name = @First) AS TotalByFirst,
    (SELECT COUNT(b.Name) FROM table AS b WHERE Name = @Last) AS TotalByLast
INTO #TempTotal
FROM #TempSearch

SELECT ts.*
FROM #TempTotal AS t, #TempSearch AS ts
WHERE t.Total = (t.TotalByFirst + t.TotalByLast)
AND t.TotalByFirst > 0 AND t.TotalByLast > 0

DROP TABLE #TempTotal
DROP TABLE #TempSearch
0 голосов
/ 21 марта 2019

Select * from table where Name = 'Bob' OR Name = 'Kay'

Вы хотите выбрать строку, в которой имя = «Боб» ИЛИ имя = «Кей».Помните, что SQL применяется для каждой строки, поэтому имя не может одновременно совпадать с 'Bob' и 'Kay'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...