【发布时间】:2017-09-24 00:21:15
【问题描述】:
我想和这个问题一样[在逻辑上] -> SQL/mysql - Select distinct/UNIQUE but return all columns?
使用SELECT DISTINCT PATH FROM... 而不是SELECT * FROM 不会返回重复项[UNION 有效] 但它确实只返回一个表列[PATH],我想要表的所有列而不仅仅是@987654330 @专栏。
**基本上我想做的是sql select multiple columns with only one distinct column **专栏PATH
这里是 SQLITE3 db 文件 ->https://github.com/goxr3plus/Tester
db 的示例 sql 语句:
SELECT * FROM '_44057' UNION SELECT * FROM '_76468' UNION SELECT * FROM '_25912' UNION SELECT * FROM '_12603' WHERE PATH LIKE '%e%';
SELECT * FROM '_44057' UNION SELECT * FROM '_76468' UNION SELECT * FROM '_25912' UNION SELECT * FROM '_12603' WHERE PATH LIKE '%e%' GROUP BY PATH;
我正在使用
SQLITE我有 4 个具有相同数据和列的相同表。所以表包含列(PATH->这是主键、STARS、...)。
其实这里是 Table create 语句:
"CREATE TABLE '" + dataBaseTableName + "'"
+ "(PATH TEXT PRIMARY KEY NOT NULL ,"
+ "STARS DOUBLE NOT NULL,"
+ "TIMESPLAYED INT NOT NULL,"
+ "DATE TEXT NOT NULL,"
+ "HOUR TEXT NOT NULL)");
我想要做的是搜索那些包含特定单词的items-songs,例如a。
所以我使用UNION 收集所有表数据,最后使用WHERE STATEMENT 和LIKE,最后我将结果限制为50。我也不想重复但由于某种原因我得到重复的行...
- 问题:
1) 重复的行被返回
2)当表格包含大量元素时,它会变慢
- 以下代码的小解释:
- 在哪里可以看到
'%" + word + "%',例如,单词是Stringa - 下面的 SQL 语句是动态生成的,我的意思是我可以 有超过 4 个表,每个表可以包含数千个 歌曲 [这有时会导致查询很慢)
简单的SQL代码:
SELECT * FROM '_44057'
UNION
SELECT * FROM '_76468'
UNION
SELECT * FROM '_25912'
UNION
SELECT * FROM '_12603'
WHERE PATH LIKE '%" + word + "%' LIMIT 50
最后:
任何建议,我的意思是从 LIKE 到 Select 或 UNION 的任何建议都非常感谢替换因为我是新手 :)。
来自重复行的图像:
【问题讨论】:
-
你能把你的桌子的ddl贴出来吗?也许你可以使用路径加入和分组
-
这是因为所有表都有 PATH 列。我正在尝试查询 atm 是否有效
-
将 UNION 替换为 UNION ALL。但是要搜索单词,您需要FTS。
-
这就是为什么我建议使用专门创建的玩具数据库制作一个仅命令行的 mcve,其中填充了合适的示例数据和一个查询来显示您的问题(仅此而已)。您可以转储制作屏幕截图的数据吗?你能找到数据库结构吗?用它来制作玩具。我认为,如果您能够做到这一点,人们将能够帮助您找到问题。其实我相信你会在制作那个mcve时自己找到它。不要让您的 GUI 或您的语言 API 向您隐藏问题的详细信息。我认为其他 cmets 的意思是一样的。
-
@XtremeBaumer 阅读所有 cmets,我只是注意到您提到了我认为的主要技巧 - 更早。积分;虽然我自己也想过。