J'apprécierais vraiment de l'aide avec une requête SQL sur plusieurs tables. Je me rends compte que ce genre de chose est constamment posé, mais je ne trouve pas une question assez similaire pour donner un sens aux réponses.
Je veux sélectionner les lignes de table_A
qui ont une balise correspondante dans table_B
.
Ainsi, par exemple, "sélectionner des lignes dans table_a
portant le libellé" chaise "" renverrait table_C
.
De plus, id
est unique dans table_a
et non dans 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
Sinon, existe-t-il un meilleur moyen d'organiser les données?
La solution la plus simple serait un corrélé sous select :
select
A.*
from
table_A A
where
A.id in (
select B.id from table_B B where B.tag = 'chair'
)
Sinon, vous pouvez rejoindre les tables et filtrer les lignes souhaitées:
select
A.*
from
table_A A
inner join table_B B
on A.id = B.id
where
B.tag = 'chair'
Vous devriez profiler les deux et voir lequel est le plus rapide sur votre jeu de données.
Vous devriez créer des balises leur propre table avec une table de liaison.
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';
J'ai un problème similaire (du moins je pense que c'est pareil). Dans l'une des réponses, la solution est la suivante:
select
A.*
from
table_A A
inner join table_B B
on A.id = B.id
where
B.tag = 'chair'
Cette clause WHERE j'aimerais être:
WHERE B.tag = A.<col_name>
ou, dans mon cas particulier:
WHERE B.val BETWEEN A.val1 AND A.val2
Plus détaillé:
Le tableau A contient les informations sur l’état d’une flotte d’équipements. Chaque enregistrement de statut comporte une heure de début et de fin de ce statut. Le tableau B contient des données horodatées régulièrement enregistrées sur le matériel, que je souhaite extraire pour la durée indiquée dans le tableau A.