我正试图用MySQL获得此输出:
-凯特
-威廉
-狗
(3个结果)
从这些数据库:
--------------- ----------------------
| users | | pet |
|-------------| |------|------|-------
| id | Name | | user|animal|number|
|-------------| |------|------|------|
| 1 |Kate | | 1 | cat | 0 |
| 2 |William| | 2 | dog | 1 |
--------------- ----------------------
数字必须为!=0
我需要能够在number=0和number!=的提取之间做出区分0
SELECT
name, animal
FROM
users
INNER JOIN pet ON users.id = pet.user
WHERE
number != 0'
我找不到"凯特",因为永远不会匹配0。
我想我应该在一个请求中使用两个不同的WHERE条件,但我不知道如何。。。
首先为表提供一个别名,因为您有一个令人震惊的列名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
首先。对表使用别名。例如,"u"表示用户表,"p"表示"pet"。Mysql不知道哪个字段从没有别名的表中获取。
第二。WHERE部分中的条件与JOIN无关。在ON部分使用AND。
第三。使用LEFT JOIN代替INNER JOIN,并阅读有关JOIN类型及其差异的文章。
第四。在这种情况下,在users
表中通常添加字段pet_id
。不要将单个id
字段用于两个实体。这就是所谓的"一对多"关系。如果要使用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