MySQL在加入/选择标准中挣扎

MySQL在加入/选择标准中挣扎,mysql,join,Mysql,Join,我希望有人能给我指出正确的方向 我有一个国家表,包含一个主要ID和国家名称(例如法国) 我有第二个表PAYMETHODS\u COUNTRIES,其中包含一个主id、付款方式id(例如4)和国家id 我试图输出每个支付方式的复选框列表,以控制哪些国家(或哪些国家的用户)可以访问这些本地支付方式 我的复选框列表正常工作,表单的处理也正常工作。剩下的最后一件事是输出选中国家的国家复选框列表(例如,此付款方式在法国和德国可用),显示为选中 所以我想做的是输出一份所有国家的完整清单 SELECT id,

我希望有人能给我指出正确的方向

我有一个国家表,包含一个主要ID和国家名称(例如法国)

我有第二个表PAYMETHODS\u COUNTRIES,其中包含一个主id、付款方式id(例如4)和国家id

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

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

所以我想做的是输出一份所有国家的完整清单

SELECT id, name FROM country ORDER BY id ASC
然后包括像这样的支付方式表(当然不起作用)

此示例查询仅显示在PAYMETHODS\u国家/地区中实际有记录的行,而不是我想要的

我希望得到的是country.id+country.name的完整列表,以及最后一个字段(PAYMETHODS\u COUNTRIES表的id)-在没有链接的情况下,该字段应为空。这样,我应该能够检查null或其他,并检查这些行的输出


希望这是有意义的——或者如果有人知道一个更好的方法来实现我正在做的事情,你的想法将受到赞赏。

由于你的WHERE条款,只有在付款方式国家有记录的行才会回来,因为你说付款方式必须=10。添加或,使其也为空:

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
   OR paymethods_countries.paymethod IS NULL

由于WHERE子句,它只返回PAYMETHODS\u国家/地区中有记录的行,因为您说paymethod必须=10。添加或,使其也为空:

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
   OR paymethods_countries.paymethod IS NULL

虽然此处的另一个答案将产生所需的结果,但从语义上来说,将条件从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条件。

虽然此处的另一个答案将产生所需的结果,但从语义上来说,将条件从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条件。

哦,天哪,你就是那个人:)非常感谢你在这方面的帮助,这是一个救命恩人。还感谢您的回复速度:)@BigTed5000您应该通过单击答案左侧的绿色勾号来接受答案。这就是我们的过程SO@MikeSmithDev-Mike看起来不错,但查询有点小问题,发生的情况是,如果已经有一个记录将付款方式8链接到国家20-那么这个国家没有出现在完整的国家列表中(因为它不是付款方式10或null)。有什么想法吗?PS-是的,它说我必须等2分钟才能使用滴答:)是的。删除WHERE子句。哦,我的天哪,你就是那个人:)非常感谢你在这个问题上的帮助,这是一个救命恩人。还感谢您的回复速度:)@BigTed5000您应该通过单击答案左侧的绿色勾号来接受答案。这就是我们的过程SO@MikeSmithDev-Mike看起来不错,但查询有点小问题,发生的情况是,如果已经有一个记录将付款方式8链接到国家20-那么这个国家没有出现在完整的国家列表中(因为它不是付款方式10或null)。有什么想法吗?PS-是的,它说我必须等2分钟才能使用滴答:)是的。删除WHERE子句。这太棒了,加文-米凯斯米斯戴夫走上了正确的道路,但用替换WHERE并使事情按预期运行。谢谢你们的帮助,伙计们:)这太好了,加文-米凯斯米斯戴夫走上了正确的道路,但用替换了WHERE,一切都如期进行。谢谢你们的帮助,伙计们:)