我正在制作一款可以查看电影的应用,我有这些表格。
mysql> SELECT title, rating, review, username FROM movies;
+------------+--------+--------------+----------+
| title | rating | review | username |
+------------+--------+--------------+----------+
| The Matrix | 5 | Great movie! | Ryan |
| Avatar | 5 | Cool | Ryan |
+------------+--------+--------------+----------+
mysql> SELECT username FROM users;
+----------+
| username |
+----------+
| Ryan |
| John |
+----------+
我尝试做的是,如果用户名存在,则返回TRUE(显示个人资料,如果没有结果显示404),但没有任何评论与之关联,并返回检查数据是否存在。
我已尝试使用EXISTS(SELECT username FROM users WHERE username = "John")
,这会返回1,但我似乎无法弄清楚如何使用此设置if语句。
编辑:为了澄清,如果用户存在,我试图返回TRUE,但是没有评论任何电影,但是否则会返回评论。
答案 0 :(得分:0)
答案 1 :(得分:0)
您想要使用的是JOIN statement。您希望能够在一个结果中同时从两个表中获取信息。
对于您的特定情况,您可能希望将movies
表与users
表一起加入。由于movies
表中可能包含username
不存在的记录,因此您需要使用LEFT JOIN
。这是一个快速的片段,可以帮助您入门:
SELECT
m.title,
m.rating,
m.review,
m.username,
CASE WHEN u.username IS NULL THEN FALSE ELSE TRUE END as user_exists
FROM movies m
LEFT JOIN users u ON u.username = m.username
Here is a SQLFiddle作为解释来玩。
答案 2 :(得分:0)
您可以在SELECT
前面使用EXISTS
执行此操作,因为IF
条件并不真正返回THEN
它会增加一点开销。
SELECT EXISTS(SELECT username FROM users WHERE username = 'John') as truth;
这将返回名为truth
的列。它将设置为1
或0
-
1 = true
0 = false
答案 3 :(得分:0)
查询
struct HistoryView: View {
@Binding var showingHistory: Bool
@State private var results = [Product]()
var body: some View {
let defaults = UserDefaults.standard
if let historyData = defaults.data(forKey: "productHistory") {
do {
self.results = try JSONDecoder().decode([Product].self, from: historyData)
} catch { print(error) }
}
return List(self.results, id: \.id) { item in
Text(item.description ?? "n/a")
}
}
}
Spring数据将字符串SELECT IF( EXISTS(SELECT * FROM users WHERE LOWER(username) ='name' ),'true','false' )AS result
或'true'
映射为布尔值