使用INNER JOIN时MySql语法出错

时间:2015-12-27 16:00:23

标签: mysql sql vb.net

我试图检查是否已经选择了用户名。在显示查询之前,这是我的表结构:

用户

<% videodata.categories.forEach(function(item) {  %>
  <li><%= item.categoryName %></li>
<% }) %>

USERS_SETTINGS

ID | data

 5    0
 6    1

如何在表ID | Username 5 Dillinger 6 John 中查看我系统中所有可用用户的列表以及user表格中我的每个用户的设置{ {1}}表。现在,如果正在系统中注册的客户选择了用户名users_settings,则会显示错误消息,因为用户已选择了用户名,而如果客户选择了John,则系统不会显示任何错误&#39;因为已有注册用户使用了用户名但已被删除 user 。 我尝试了什么:

Dillinger

但当我data: 1时,我得到了:

  

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第2行使用neare&#39; d u.id = d.id&#39;

到底出了什么问题?

3 个答案:

答案 0 :(得分:1)

这解决了语法问题:

select count(*)
from user u join
     user_settings us
     on u.id = us.id -- I am guessing about the right column name here
where u.username = @usernamep and us.data = @datap;

然而,这比它可能需要的更昂贵。更便宜的方法使用exists而不是count()

select 1
from user u
where u.username = @usernamep and
      exists (select 1
              from user_settings us
              where u.id = us.id and us.data = @datap
             )
limit 1;

如果用户返回任何行,则该用户已存在。为获得最佳性能,您需要user(username)user_settings(user_id, data)上的索引。

答案 1 :(得分:0)

您似乎将两个不同的别名(或拼写错误)分配给无效的表格,并且应该更改为:

query = "SELECT Count(username) 
         FROM users_settings u INNER JOIN user d 
         ON u.id = d.id
         WHERE u.username = @usernamep 
         AND   d.data = @datap"

答案 2 :(得分:0)

试试这个

query = "SELECT Count(username) from users_settings u
                            INNER JOIN user d ON
                            u.id = d.id
                            WHERE u.username = @usernamep AND
                            d.data = @datap"