2016-09-16 5 views
0

Mein Modell ist A as many B. Diese Tabellen beziehen sich auf A.id und B.item_id. B hat eine Spalte namens created_at. Ich muss alle Zeilen von A so wählen, dass B.created_at größer ist als 2016-09-1`. Ich würde gerne wissen, ob es möglich, diese Frage mit einer Abfrage ähnlich wie diese lösen:Sql mehrere Zeilen größer als der Wert der anderen Tabelle

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

Antwort

0

Sie können dies mit einem JOIN und nur von A Auswahl:

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

ohne mitmachen bitte –

+0

Warum ohne beitreten? Es fungiert als Filter, um Ihnen nur das zu geben, was Sie brauchen. – Siyual

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

müssen Sie aus A alle Zeilen auswählen, so dass B.created_at größer ist als '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

Im Allgemeinen kann dies mit einem INNER JOIN durchgeführt werden, der Ihre Datumsfilterkriterien enthält. Etwas wie:

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

Dies wäre eine T-SQL-Methode dafür.

Sie können auch eine einfache Anwendung WHERE-Klausel - würden Sie wollen den Ausführungsplan überprüfen, ob eine dieser Optionen, um zu sehen, einen wirklichen Unterschied machen ...

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

Wenn Sie eine Teilmenge verwenden möchten zuerst aus der Tabelle B ... können Sie tun ...

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

All dies funktionieren würde, mit T-SQL, kann nicht auf andere SQL-ähnlichen Sprachen sprechen.

+0

ohne innere Verbindung? –

+0

Ich kann das auch hinzufügen - wollen Sie alle Datensätze aus Tabelle A, die nicht in Tabelle B sind? Wenn nicht, dann ist die innere Verbindung am sinnvollsten. Was fragst du, wenn ich fragen kann? Ist das SQL Server, Oracle, MySQL usw.? -edit: Oder fragen Sie über den Beitritt mit der Where-Klausel? – Sevyns

Verwandte Themen