如果存在,MySQL返回TRUE并且不与另一个表匹配

时间:2017-11-27 21:19:23

标签: mysql

我正在制作一款可以查看电影的应用,我有这些表格。

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,但是没有评论任何电影,但是否则会返回评论。

4 个答案:

答案 0 :(得分:0)

1TRUE都是'truthy'

因此,您只需在现有代码前添加IF即可:

IF EXISTS(SELECT username FROM users WHERE username = "John")

答案 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的列。它将设置为10 -

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'映射为布尔值