wake-up-neo.com

Wählen Sie aus einer Tabelle passende Kriterien in einer anderen aus.

Ich würde mich sehr über eine Hilfe bei einer SQL-Abfrage über Tabellen hinweg freuen. Mir ist klar, dass diese Art von Fragen ständig gestellt wird, aber ich kann keine ähnliche Frage stellen, um die Antworten zu verstehen.

Ich möchte Zeilen aus table_A auswählen, die in table_B ein entsprechendes Tag haben.
"Wählen Sie beispielsweise Zeilen aus table_a aus, die mit" chair "gekennzeichnet sind" "würde table_C zurückgeben.

Auch id ist in table_a eindeutig und nicht in table_b.

table_A:             table_B:                  table_C:

id    object         id    tag                 id    object
1     lamp           1     furniture           3     stool
2     table          2     furniture           4     bench
3     stool          3     furniture
4     bench          4     furniture
                     4     chair
                     3     chair

Gibt es alternativ eine bessere Möglichkeit, die Daten zu organisieren?

37
user668660

Die einfachste Lösung wäre ein korreliertes Sub select:

select
    A.*
from
    table_A A
where
    A.id in (
        select B.id from table_B B where B.tag = 'chair'
)

Alternativ können Sie die Tabellen mit join verknüpfen und die gewünschten Zeilen filtern:

select
    A.*
from
    table_A A
inner join table_B B
    on A.id = B.id
where
    B.tag = 'chair'

Sie sollten beide Profile erstellen und feststellen, welche Daten in Ihrem Datensatz schneller sind.

85
Chris Nava

Sie sollten Tags eine eigene Tabelle mit einer Verknüpfungstabelle erstellen.

items:
id    object
1     lamp  
2     table   
3     stool  
4     bench 

tags:
id     tag
1      furniture
2      chair

items_tags:
item_id tag_id
1       1
2       1
3       1
4       1
3       2
4       2
8
rjschnorenberg
select a.id, a.object
from table_A a
inner join table_B b on a.id=b.id
where b.tag = 'chair';
3
RichardTheKiwi

Ich habe ein ähnliches Problem (zumindest denke ich, dass es ähnlich ist). In einer der Antworten lautet die Lösung wie folgt:

select
    A.*
from
    table_A A
inner join table_B B
    on A.id = B.id
where
    B.tag = 'chair'

Diese WHERE-Klausel möchte ich sein:

WHERE B.tag = A.<col_name>

oder in meinem speziellen Fall:

WHERE B.val BETWEEN A.val1 AND A.val2

Genauer:

Tabelle A enthält Statusinformationen einer Flotte von Ausrüstungen. Jeder Statussatz enthält eine Start- und Stoppzeit dieses Status. Tabelle B enthält regelmäßig aufgezeichnete, mit Zeitstempel versehene Daten über das Gerät, die ich für die Dauer des in Tabelle A angegebenen Zeitraums extrahieren möchte.

0
KohanJ