如何使用Where Join在哪里?

时间:2015-04-17 12:06:48

标签: mysql

我正在尝试列出来自伦敦并且从我的表中拥有NORMAL或GOLD会员类型的用户。

users table
====================
id  name   city_id  user_type
1   Helen  2        NA
2   James  1        PREMIUM
3   David  1        NORMAL

cities table
=============
id  name
1   London
2   New York


$londonUsers = $db->get_rows("
    SELECT * FROM users
    WHERE user_type = ('NORMAL','PREMIUM')
    JOIN cities ON cities.id = users.city_id
    WHERE name = 'London'
");

2 个答案:

答案 0 :(得分:4)

SELECT,FROM,JOIN,WHERE,GROUP BY,HAVING,ORDER BY。

使用" AND"或"或"在where子句或连接中组合多个条件时 你不能使用user_Type =两件事。你必须使用IN(此列表)或创建单独的条件。比如

WHERE (user_type = 'NORMAL' or user_type = 'PREMIUM') and name = 'London'

 SELECT * 
 FROM users u
 JOIN cities c
   ON c.id = u.city_id
 WHERE c.name = 'London'
   and u.user_type in ('NORMAL','PREMIUM')

答案 1 :(得分:1)

您只能在FROM / JOIN语句之后放置WHERE子句。如果您需要多个WHERE语句,可以将它们与AND一起添加(WHERE语句中的条款结果应为TRUEFALSE因此,您可以使用ANDOR)组合语句。

以下是您在示例中的操作方法:

SELECT * 
FROM users
JOIN cities ON cities.id = users.city_id    
WHERE user_type IN ('NORMAL','PREMIUM')
  AND cities.name = 'London'

这将首先为您提供这样的联接表:

join table result
====================
users.id  users.name   users.city_id  users.user_type  cities.id  cities.name
1         Helen        2              NA               2          New York
2         James        1              PREMIUM          1          London
3         David        1              NORMAL           1          London

然后过滤掉只显示符合WHERE语句的那些语句,即user_type NORMAL或PREMIUM和伦敦城市。