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?
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.
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
select a.id, a.object
from table_A a
inner join table_B b on a.id=b.id
where b.tag = 'chair';
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.