es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al utilizar la cláusula WITH e INTERSECT en SQLite.

Tengo dos consultas SQL;
La primera es:

con b como (select person_id from people where name=’Ward Bond’ and born=1903)
select title_id from b natural join crew;

Que produce resultados correctos y está bien.
La otra es:

con c como (select person_id from people where name=’John Wayne’ and born=1907)
select title_id from c natural join crew;

Lo cual también es totalmente correcto y produce resultados correctos. Tan pronto como trato de encontrar la intersección de estas dos consultas utilizando la siguiente consulta:

con b como (select person_id from people where name=’Ward Bond’ and born=1903) select title_id from b natural join crew
intersect
con c como (select person_id from people where name=’John Wayne’ and born=1907) select title_id from c natural join crew;

Obtengo el error “Error: cerca de ‘con’: error de sintaxis”
Estoy usando SQLite3. ¿Me puedes ayudar a encontrar el problema? Lo que estoy tratando de hacer es sencillo; Quiero tener la intersección de estas dos tablas temporales.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la consulta es que la declaración WITH solo se puede usar una vez en una sola instrucción SQL. Para encontrar la intersección de las dos consultas, se pueden usar subconsultas en lugar de la declaración WITH. Así es como debería verse la consulta modificada:

    SELECT title_id
    FROM (
      SELECT title_id
      FROM people JOIN crew ON people.person_id = crew.person_id
      WHERE name = 'Ward Bond' AND born = 1903
    ) b
    INTERSECT
    SELECT title_id
    FROM (
      SELECT title_id
      FROM people JOIN crew ON people.person_id = crew.person_id
      WHERE name = 'John Wayne' AND born = 1907
    ) c;
    

    En esta consulta modificada, las declaraciones WITH se han reemplazado por subconsultas que logran lo mismo: extraer el person_id de las personas requeridas de la tabla people y luego usarlo para unirse con la tabla crew para obtener el title_id asociado. Los resultados de estas subconsultas se usan luego para encontrar la intersección usando la palabra clave INTERSECT.

Comments are closed.