Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLite3-交叉表选择查询_Python_Sql_Sqlite_Select - Fatal编程技术网

Python SQLite3-交叉表选择查询

Python SQLite3-交叉表选择查询,python,sql,sqlite,select,Python,Sql,Sqlite,Select,我想要返回的是性能表中的所有座位id,其预订id与预订表中的所有预订id(其中night=1)匹配-内部联接是最好的方式吗 还是更像是从演出中选择座位号,预订中的座位号=选择,预订中的夜晚号 通过以上操作,我得到了sqlite3.OperationalError:不完整的输入错误 有了这个,我得到了ValueError:参数的类型是不受支持的错误。您正在将列表结果与整数进行比较 此选项从预订中选择*,其中夜间=?=>返回N行的值 您正在等待从performance中选择一个整数seat\u id

我想要返回的是性能表中的所有座位id,其预订id与预订表中的所有预订id(其中night=1)匹配-内部联接是最好的方式吗

还是更像是从演出中选择座位号,预订中的座位号=选择,预订中的夜晚号

通过以上操作,我得到了sqlite3.OperationalError:不完整的输入错误


有了这个,我得到了ValueError:参数的类型是不受支持的错误。

您正在将列表结果与整数进行比较

此选项从预订中选择*,其中夜间=?=>返回N行的值 您正在等待从performance中选择一个整数seat\u id,其中booking\u id=

您必须使用以下内容:

SELECT seat_id FROM performance WHERE booking_id in (SELECT * FROM booking WHERE night = ?""", (night_number))

首先,如果这是您的实际代码,那么在性能表的CREATE语句中有一个输入错误。 您必须在以下步骤的末尾删除:

FOREIGN KEY (booking_id) REFERENCES booking(booking_id), 
那么,这里:

cursor.execute("""SELECT seat_id FROM performance WHERE booking_id=(SELECT * FROM booking WHERE night = ?""", (night_number))
sql语句缺少右括号,子查询可能返回多行,因此应在中使用而不是=。 此外,参数night_number应作为元组传递,而不仅仅是一个数字,方法是在paraenthese中添加a:

cursor.execute("""SELECT seat_id FROM performance WHERE booking_id IN (SELECT * FROM booking WHERE night = ?)""", (night_number,))
对于join,您需要一个适当的ON子句,该子句链接表和,以创建night_number的元组:

在这两种情况下,中的运算符和联接都将起作用。 还有另一种选择有时表现更好,这是存在的:


错误仍然存在,因为您没有传递元组。好的,谢谢您-我有点困惑sql变量是用于什么以及b和p来自哪里。这是SELECT语句之上必需的吗?@BenjaminMcDowell sql变量存储sql语句,它是execute的第一个参数。p和b是表的别名,它们用于限定列名,以便不存在歧义。例如:b.booking\u id=p.booking\u id可以明确哪个列是哪个列,因为b表示预订,p表示绩效。
cursor.execute("""SELECT seat_id FROM performance WHERE booking_id IN (SELECT * FROM booking WHERE night = ?)""", (night_number,))
sql = """
SELECT p.seat_id 
FROM performance p INNER JOIN booking b 
ON b.booking_id = p. booking_id
WHERE b.night=?
"""
cursor.execute(sql, (night_number,))
sql = """
SELECT p.seat_id 
FROM performance p 
WHERE EXISTS (
  SELECT 1 FROM booking b 
  WHERE b.night=? AND b.booking_id = p.booking_id
)
"""
cursor.execute(sql, (night_number,))