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

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

我有两张table:
用户

  1. ------------------------------------
  2. | id (PK) | password | name | role |
  3. ------------------------------------

  1. -------------------------------------------
  2. | dogid (PK) | userid (FK : id) | dogname |
  3. -------------------------------------------

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

  1. <?php
  2. $sql = "SELECT * FROM users INNER JOIN dogs ON users.username = dogs.userid WHERE users.role = 'dogowner' ORDER BY name";
  3. $stmt = $con->prepare($sql);
  4. $stmt->execute();
  5. $result = $stmt->fetchAll();
  6. ?>
  7. <select id="gebrid" name="gebrid">
  8. <?php foreach($result as $pers): ?>
  9. <option value="<?= $pers['username']; ?>"><?= $pers['name']; ?></option>
  10. <?php endforeach; ?>
  11. </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应该是:
用户

  1. ------------------------------------------------
  2. | id (PK) | password | name | role | dogid (FK)|
  3. ------------------------------------------------

  1. ------------------------
  2. | dogid (PK) | dogname |
  3. ------------------------

然后

  1. SELECT * FROM USERS WHERE DogID IS NULL
de90aj5v

de90aj5v3#

像这样的?

  1. SELECT *
  2. FROM users
  3. WHERE id NOT IN (SELECT userid
  4. FROM dogs)

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

相关问题