MySQL多个WHERE条件

时间:2014-09-18 22:18:09

标签: php mysql

我正在尝试用MySQL获得此输出:
-Kate
- 威廉
-DOG
(3结果)

从这些数据库:

---------------    ---------------------- 
|  users      |    |         pet        |
|-------------|    |------|------|-------
| id  | Name  |    |  user|animal|number|
|-------------|    |------|------|------| 
| 1   |Kate   |    |  1   |  cat |   0  |
| 2   |William|    |  2   |  dog |   1  |
---------------    ----------------------

号码需要!= 0
 我需要能够区分数字= 0和数字!= 0

的fetch
SELECT
    name, animal  
FROM
    users  
    INNER JOIN pet ON users.id = pet.user 
WHERE
    number != 0'

我无法得到'凯特',因为永远不会匹配!= 0 我想我应该在一个请求中使用2个不同的WHERE条件,但我不知道如何......

2 个答案:

答案 0 :(得分:2)

首先将表格作为别名,因为您的列名称id不明确。

SELECT u.name, p.animal  
FROM users AS u
INNER JOIN pet AS p 
ON u.id = p.id  
WHERE p.number != 0

但你要求的是在没有加入的情况下从两个表中获得结果,对吧?喜欢这个

SELECT
    name AS creatur,
    'users' AS type
FROM users  

UNION

SELECT
    animal AS creatur,
    'pet' AS type
FROM pet  
WHERE number != 0

答案 1 :(得分:1)

首先。对表使用别名。例如,使用' u'对于用户表和' p'为了宠物'。 Mysql不知道哪个字段从没有别名的哪个表中获取。

二。 WHERE部分中的条件与JOIN无关。在ON部分使用AND。

第三。使用LEFT JOIN而不是INNER JOIN,阅读有关JOIN类型和它们之间差异的文章。

四。在users表中的这种情况下,通常会添加字段pet_id。不要对两个实体使用单个id字段。这件事命名为ONE-TO-MANY。如果要使用MANY-TO-MANY关系,则必须添加包含两个字段user_idpet_id的第三个表。

但是这个查询可以解决你的问题:

SELECT u.Name, p.animal
FROM users AS u
LEFT JOIN pet AS p ON u.id = p.user AND p.number != 0