MySQL 与加入/选择标准作斗争

标签 mysql join

我希望有人能够为我指明正确的方向。

我有一个 COUNTRY 表,其中包含主要 ID 和国家/地区名称(例如法国)

我有第二个表 PAYMETHODS_COUNTRIES,其中包含主要 ID、付款方式 ID(例如 4)和国家/地区 ID

我试图在每种支付方式上输出一个复选框列表,以控制哪些国家(或哪些国家的用户)可以使用这些本地支付方式。

我的复选框列表工作正常,表单的处理也正常。最后剩下的事情是输出带有选定国家/地区的国家/地区复选框列表(例如,此付款方式在法国和德国可用)显示为已选中。

所以我要做的是输出所有国家的完整列表

SELECT id, name FROM country ORDER BY id ASC

然后包括类似这样的 PAYMETHODS_COUNTRIES 表(当然不起作用)

SELECT country.id AS countryid,
country.name AS countryname,
paymethods_countries.id AS methodid
FROM country LEFT JOIN `paymethods_countries` 
ON country.id = paymethods_countries.country
WHERE paymethods_countries.paymethod = 10

此示例查询仅显示在 PAYMETHODS_COUNTRIES 中实际有记录的行,而不是我想要的。

我所希望的是 country.id + country.name 的完整列表,其中包含最后一个字段(PAYMETHODS_COUNTRIES 表的 ID)- 在没有链接的情况下应该为 null。这样我应该能够检查是否为 null 或其他,并为这些行输出 CHECKED。

希望这是有道理的 - 或者如果有人知道实现我正在做的事情的更好方法,我们将不胜感激。

最佳答案

虽然此处的其他答案会产生所需的结果,但从语义上讲,将条件从 WHERE 子句移至 ON 子句更为正确:

SELECT country.id AS countryid,
    country.name AS countryname,
    paymethods_countries.id AS methodid
FROM country 
LEFT JOIN `paymethods_countries` 
   ON country.id = paymethods_countries.country and paymethods_countries.paymethod = 10

这样就无需在 WHERE 子句中添加额外的 OR 条件。

关于MySQL 与加入/选择标准作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338393/

相关文章:

php - 跟踪每个人每月的通话次数——MySQL 还是 XML?

mysql - 如何在mysql中重置自动增量值?

Mongodb加入从String到ObjectId的_id字段

php - MySQL SUM 到 PHP While 循环

python - 自定义 unique_together 键名

sql - 如果计数为 0,则不返回 Mysql 结果

mysql - SQL(Mysql)中的树状数据整理

mysql - 连接到 MySQL 中另一个表中的第 n 个最高值

PostgreSQL:从两个表中选择计数和最大值

mysql行号实现始终是增量的(从1到n排序)