varios varias valores una sentencia operador mismo misma condiciones condicion con columna campo sql multiple-tables

varias - where con 3 condiciones sql



SQL: ¿Seleccionar de una tabla los criterios de coincidencia en otro? (4)

Realmente agradecería algo de ayuda con una consulta SQL en tablas. Me doy cuenta de que este tipo de cosas se preguntan constantemente, pero no puedo encontrar una pregunta lo suficientemente similar para dar sentido a las respuestas.

Quiero seleccionar filas de la table_A que tengan una etiqueta correspondiente en la table_B .
Entonces, por ejemplo, "select rows from table_a que están etiquetados ''chair''" devolvería table_C .

Además, id es único en table_a , y no en 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

Alternativamente, ¿hay una mejor manera de organizar los datos?


Debe hacer que las etiquetas sean su propia tabla con una tabla de enlaces.

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


La solución más simple sería una sub selección correlacionada :

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

Alternativamente, puede unir las tablas y filtrar las filas que desee:

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

Debe perfilar ambos y ver cuál es más rápido en su conjunto de datos.


Tengo un problema similar (al menos creo que es similar). En una de las respuestas aquí, la solución es la siguiente:

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

Esa cláusula DONDE me gustaría ser:

WHERE B.tag = A.<col_name>

o, en mi caso específico:

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

Más detallado:

La Tabla A contiene información de estado de una flota de equipos. Cada registro de estado lleva consigo un tiempo de inicio y finalización de ese estado. La Tabla B contiene datos de la marca de tiempo regularmente grabados y registrados sobre el equipo, que quiero extraer para la duración del período indicado en la tabla A.


select a.id, a.object from table_A a inner join table_B b on a.id=b.id where b.tag = ''chair'';