当运行如下 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/