python - 如何使 SQL 返回重复项?

标签 python sql django postgresql

当运行如下 SQL 时;

SELECT * FROM items WHERE item_name IN ('fish', 'frog', 'fish')

我得到了 1 只 Frog 和 1 条鱼。这是预期的正常行为,因为 WHERE 子句无疑会单独评估数据库中的每一行。

但是,在我当前的应用程序中,我需要为 WHERE 子句中的每个项目返回一整行。我目前的做法是获取 IN 语句的全部内容,然后运行第二个查询来获取每个对象。在 python 中,我然后根据需要复制行。但是,如果我能让 sql 为我做这件事,这将意味着减少 1 次数据库往返。

您能否强制数据库为 IN 中的每个条目返回响应?


示例数据;

项目

id | name | price
1  | frog | 4
2  | fish | 3

用户对象

id | user_id | item_name
1  | 1       | fish
1  | 1       | frog
1  | 1       | fish

我知道 item_name 应该是 item 的外键 - 但由于令人沮丧的遗留原因,目前这是不可能的。

一个理想的解决方案是让我能够通过 Django ORM 轻松完成此操作 - 但是,如果这不太可能,我们非常欢迎其他答案。

最佳答案

您可以将 Fish、Frog 和 Fish 放入临时表/表变量中并将它们连接到项目,而不是使用 IN 子句:

create table items (id int primary key, item_names varchar(20))
DECLARE @animal table (animal_name varchar(20))
insert into items VALUES (1, 'fish'), (2, 'frog')
insert into @animal VALUES ('fish'), ('frog'), ('fish')

SELECT * FROM items i
inner join @animal a on i.item_names = a.animal_name

关于python - 如何使 SQL 返回重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47006817/

相关文章:

python - 在 Python 中从一个文件读取并写入另一个文件

python - LiveServerTestCase 服务器看到不同的数据库进行测试

python - 处理我的测量数据的最佳库和实现

sql - 存储过程 - 从带有联接的表中删除

sql - SQL Server 2008日志截断是否会暂停事务

sql - 为什么我的简单 SQL 语句需要这么长时间才能执行?我该如何查找问题?

python - 如何将文件上传到 Django 中的特定文件夹?

django - 防止 Django 模板中的整数出现 NUMBER_GROUPING

python - 如何使用 ORM 库将 python 模块与 mysql Alchemy 集成

python - 具有多个键映射到相同值的字典