php - 如何选择不同表中不存在的行?
问题描述
我有 3 张桌子:
斯托芬
-------------------
| pot (PK) | naam |
-------------------
| 1 | dust |
| 2 | iron |
| 3 | gold |
-------------------
硬测试
-----------------------------------------------------------------------
| id (PK) | score | done | stofid (FK : pot) | userid (FK : username) |
-----------------------------------------------------------------------
| 1 | 75 | Ja | 1 | user01 |
| 2 | 25 | Ja | 2 | user01 |
| 3 | 85 | Ja | 2 | user02 |
-----------------------------------------------------------------------
用户
-------------------------------------------
| username (PK) | name | rol | basis |
-------------------------------------------
| user01 | Ben | geleider | VLB |
| user02 | Tom | geleider | GER |
-------------------------------------------
这 3 个表都在此查询中使用:
SELECT *
FROM stoffen
INNER JOIN stoftesten ON stoffen.pot = stoftesten.stofid
INNER JOIN users ON users.username = stoftesten.gebruikersid
WHERE stoftesten.done = 'Ja' and users.username = '$pers->username'
ORDER BY naam";
它列出了链接到“stoftest”的所有“stoffen”。user01 得到一个带有灰尘和铁的列表,而 user02 得到一个只有铁的列表。
我想知道是否有办法列出不在此列表中的项目列表,即未使用的项目列表。所以我这样做了:
SELECT *
FROM stoffen
LEFT JOIN stoftesten ON stoffen.pot = stoftesten.stofid
LEFT JOIN users ON users.username = stoftesten.gebruikersid
WHERE stoftesten.gedaan IS NULL
ORDER BY stoffen.naam;
这创建了我想要的列表,至少我是这么想的。当我登录到其他帐户时,我会得到相同的“不在列表中”列表。这是可以理解的,因为我没有指定任何用户。
但我找不到办法做到这一点。“stoftesten”表连接“stoffen”和“users”。有没有办法只显示不在列表中但对每个用户都不同的“stoffen”?
解决方案
使用 across join
生成所有行。然后使用 aLEFT JOIN
获取匹配项并过滤掉任何实际匹配的行:
select s.pot, u.username
from stoffen s cross join
users u left join
stoffentesten st
on s.pot = st.stofid and u.username = st.gebruikersid
where st.stofid is null
推荐阅读
- javascript - 如何阻止客户端从控制台调用 ajax 函数?
- python - 抓取需要提交表单的 php 网页
- python - Python 使用 JSON 对数据进行排序
- java - SSH 服务器-客户端通信,来自套接字的读写流
- javascript - SVG onclick 事件未在 iOS 设备上触发
- docker - 如何为不属于亚马逊估算器的 Sagemaker 创建 docker 映像以创建端点?
- python - 计数和突出显示问题
- javascript - 在 AJAX 请求之后,如何使用反应上下文 api 值更新 Formik 初始值?
- php - 如何修复 mysqli 更新数据库中的错误值?
- excel - 无法执行简单的 Excel.Application 事件处理