我正在尝试用MySQL获得此输出:
-Kate
- 威廉
-DOG
(3结果)
从这些数据库:
--------------- ----------------------
| users | | pet |
|-------------| |------|------|-------
| id | Name | | user|animal|number|
|-------------| |------|------|------|
| 1 |Kate | | 1 | cat | 0 |
| 2 |William| | 2 | dog | 1 |
--------------- ----------------------
号码需要!= 0
我需要能够区分数字= 0和数字!= 0
SELECT
name, animal
FROM
users
INNER JOIN pet ON users.id = pet.user
WHERE
number != 0'
我无法得到'凯特',因为永远不会匹配!= 0 我想我应该在一个请求中使用2个不同的WHERE条件,但我不知道如何......
答案 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_id
和pet_id
的第三个表。
但是这个查询可以解决你的问题:
SELECT u.Name, p.animal
FROM users AS u
LEFT JOIN pet AS p ON u.id = p.user AND p.number != 0