如何从没有链接到其他表的表中选择行?

tquggr8v  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(347)

我有两张table:
用户

------------------------------------
| id (PK) | password | name | role |
------------------------------------

-------------------------------------------
| dogid (PK) | userid (FK : id) | dogname |
-------------------------------------------

我做了一个表单,你可以链接一个用户到一只狗,但每个用户只能有一只狗。我做了一个组合框,你可以选择一个用户,链接到狗。这很管用

<?php
    $sql = "SELECT * FROM users INNER JOIN dogs ON users.username = dogs.userid WHERE users.role = 'dogowner' ORDER BY name";
    $stmt = $con->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
?>
<select id="gebrid" name="gebrid">
    <?php foreach($result as $pers): ?>
    <option value="<?= $pers['username']; ?>"><?= $pers['name']; ?></option>
    <?php endforeach; ?>
</select>

上面的代码选择角色为“dogowner”的所有用户。我想要第二个where条件,它只选择没有狗的用户。
这是可能的,还是我必须改变我的数据库?

fae0ux8s

fae0ux8s1#

使用 left join 并添加 dogs.userid IS NULL ```
SELECT users.*
FROM users
LEFT JOIN dogs ON users.id = dogs.userid
WHERE users.role = 'dogowner'
AND dogs.userid IS NULL
ORDER BY users.name

u5rb5r59

u5rb5r592#

根据您的描述(=1个用户只能有1只狗),db应该是:
用户

------------------------------------------------
| id (PK) | password | name | role | dogid (FK)|
------------------------------------------------

------------------------
| dogid (PK) | dogname |
------------------------

然后

SELECT * FROM USERS WHERE DogID IS NULL
de90aj5v

de90aj5v3#

像这样的?

SELECT * 
FROM users 
WHERE id NOT IN (SELECT userid 
                 FROM dogs)

这将为您提供dogs表中userid列中没有id的所有用户。

相关问题