2016-09-16 2 views
0

Моя модель A as many B. Эти таблицы относятся к A.id и B.item_id. B имеет столбец created_at. Мне нужно выбрать все строки из A, так что B.created_at больше, чем 2016-09-1`. Я хотел бы знать, если это возможно, чтобы решить этот вопрос, используя запрос, подобный этому:Sql несколько строк больше, чем значение другой таблицы

SELECT * FROM A 
WHERE (
    (SELECT B.created_at 
    FROM B 
    WHERE B.item_id = A.id) 
    >= '2016-09-1') 

ответ

0

Вы можете сделать это с помощью JOIN и выбирающий только A:

Select A.* 
From A 
Join B On A.id = B.item_id 
Where B.created_at > '2016-09-01' 
+0

без участия пожалуйста –

+0

Почему без присоединения? Он действует как фильтр, который дает вам только то, что вам нужно. – Siyual

0
select A.* 
from A 
left join B 
    on B.item_id=A.id 
where B.created_at >= '2016-09-1' 
0

необходимо выбрать из A все строки, такие, что B.created_at больше, чем '2016-09-1'

select * from A where exists(SELECT 1 
    FROM B 
    WHERE B.item_id = A.id) 
    b.created_at>= '2016-09-1') 
0

В общем, это может быть сделано с помощью INNER JOIN, содержащего критерии фильтра даты. Что-то вроде:

SELECT A.* 
FROM A 
INNER JOIN B 
    ON A.id = B.Iditem_id 
    AND B.created_at > '2016-09-01' 

Это будет метод T-SQL для этого.

Вы также можете применить простой ИНЕК - вы хотите, чтобы проверить выполнение плана, чтобы увидеть, если любой из этих вариантов сделать реальную разницу ...

SELECT A.* 
FROM A 
INNER JOIN B 
    ON A.id = B.Iditem_id 
WHERE B.created_at > '2016-09-01' 

Если вы хотите использовать подмножество из таблицы в первый ... вы можете сделать ...

SELECT A.* 
FROM A 
INNER JOIN (
      SELECT B.* 
      FROM B 
      WHERE B.created_at > '2016-09-01') 
      )Bsub 
    ON A.id = Bsub.Iditem_id 

Все они будут работать с T-SQL, не может говорить с другими SQL-подобных языков.

+0

без внутреннего соединения? –

+0

Я тоже могу добавить это - вы хотите, чтобы все записи из таблицы A не были в таблице B? Если нет, то внутреннее соединение имеет наибольший смысл. Что вы спрашиваете, если я могу спросить? Это SQL Server, Oracle, mysql и т. Д.? -edit: Или вы спрашиваете о том, как сделать соединение, используя предложение where? – Sevyns

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