MySQL使用DISTINCT或LIMIT左连接。只需要左连接一个值

MySQL使用DISTINCT或LIMIT左连接。只需要左连接一个值,mysql,Mysql,MySQL表18_8_ MySQL表2\u 1\u日志 MySQL表18_6_TransactionPartners 质疑 为了得到这样的结果,必须输入输出 TransactionPartnerName | Amount ----------------------------------------- Name1 | 55 但是,如表18所示,TransactionPartners有两个名称1 get 尝试选择相同的结果而不是选择 而不是在Transacti

MySQL表18_8_

MySQL表2\u 1\u日志

MySQL表18_6_TransactionPartners

质疑

为了得到这样的结果,必须输入输出

TransactionPartnerName | Amount
-----------------------------------------
  Name1                | 55
但是,如表18所示,TransactionPartners有两个名称1 get

尝试选择相同的结果而不是选择

而不是在TransactionPartnerName=CompanyName上尝试了TransactionPartnerName=CompanyName限制1获取语法错误

可能在某个地方需要按公司名称分组


请给出建议……

试试这样的方法:

SELECT 
    TransactionPartnerName, Amount
FROM 18_8_ChartOfAccounts
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount
    LEFT JOIN 18_6_TransactionPartners ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55
GROUP BY TransactionPartnerName;

试着这样做:

SELECT 
    TransactionPartnerName, Amount
FROM 18_8_ChartOfAccounts
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount
    LEFT JOIN 18_6_TransactionPartners ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55
GROUP BY TransactionPartnerName;
DISTINCT并没有限制结果中的行数——它只是确保所有行都是唯一的

极限解是正确的。只有它必须放在查询的末尾。因此,正确的查询应该是:

SELECT 
    AccountNumber,
    DebitAccount, TransactionPartnerName, Amount,
    CompanyName
FROM 18_8_ChartOfAccounts
LEFT JOIN 2_1_journal
    ON AccountNumber = DebitAccount
LEFT JOIN 18_6_TransactionPartners
    ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55
LIMIT 1;
DISTINCT并没有限制结果中的行数——它只是确保所有行都是唯一的

极限解是正确的。只有它必须放在查询的末尾。因此,正确的查询应该是:

SELECT 
    AccountNumber,
    DebitAccount, TransactionPartnerName, Amount,
    CompanyName
FROM 18_8_ChartOfAccounts
LEFT JOIN 2_1_journal
    ON AccountNumber = DebitAccount
LEFT JOIN 18_6_TransactionPartners
    ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55
LIMIT 1;

您可以在TransactionPartners表左侧的子查询中使用GROUPBY语句

SELECT 
    AccountNumber, DebitAccount, TransactionPartnerName, Amount, CompanyName
FROM 18_8_ChartOfAccounts
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount
    LEFT JOIN (SELECT CompanyName FROM 18_6_TransactionPartners GROUP BY CompanyName) ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55

edit1:更正了列名。

您可以在TransactionPartners表左侧的子查询中使用GROUPBY语句

SELECT 
    AccountNumber, DebitAccount, TransactionPartnerName, Amount, CompanyName
FROM 18_8_ChartOfAccounts
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount
    LEFT JOIN (SELECT CompanyName FROM 18_6_TransactionPartners GROUP BY CompanyName) ON TransactionPartnerName = CompanyName
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55

edit1:更正了列名。

尝试使用唯一键建立表之间的关系

将TransactionPartnerName更改为TransactionPartnerId,并将新列PartnerId添加到18_6_TransactionPartners表中,然后使用此新列连接这些表

SELECT AccountNumber, DebitAccount, TransactionPartnerName, Amount, CompanyName 
FROM 18_8_ChartOfAccounts 
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount 
    LEFT JOIN 18_6_TransactionPartners ON TransactionPartnerId = PartnerId 
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55

尝试使用唯一键在表之间建立关系

将TransactionPartnerName更改为TransactionPartnerId,并将新列PartnerId添加到18_6_TransactionPartners表中,然后使用此新列连接这些表

SELECT AccountNumber, DebitAccount, TransactionPartnerName, Amount, CompanyName 
FROM 18_8_ChartOfAccounts 
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount 
    LEFT JOIN 18_6_TransactionPartners ON TransactionPartnerId = PartnerId 
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55

尝试过,而且似乎完全是必要的。按帮助分组。由于金额字段对于TransactionPartnerName的每个值始终具有相同的值,因此按句子分组是最佳选择。但是,如果在表2\u 1\u日记账中有多条记录的名称为1,而不是所有记录,则只能获得一条记录…尝试了,似乎完全是必要的。按帮助分组。由于金额字段对于TransactionPartnerName的每个值始终具有相同的值,因此按句子分组是最佳选择。但是,如果在表2\u 1\u日记账中有多条记录的名称为1而不是所有记录,则只能获取一条记录…不幸的是,获取SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名。似乎@vicentazo解决方案有效,而且非常简短……感谢您的想法。将此左连接选择TransactionPartnerName从18_6_TransactionPartners GROUP BY TransactionPartnerName更改为左连接选择CompanyName从18_6_TransactionPartners GROUP BY CompanyName 18_6_TransactionPartners无错误,似乎获取了所需内容,但需要测试,误认了列名。但是,您必须测试哪个查询具有更好的性能。不幸的是,get-SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名。似乎@vicentazo解决方案有效,而且非常简短……感谢您的想法。将此左连接选择TransactionPartnerName从18_6_TransactionPartners GROUP BY TransactionPartnerName更改为左连接选择CompanyName从18_6_TransactionPartners GROUP BY CompanyName 18_6_TransactionPartners无错误,似乎获取了所需内容,但需要测试,误认了列名。但是,您必须测试哪个查询具有更好的性能。
SELECT AccountNumber, DebitAccount, TransactionPartnerName, Amount, CompanyName 
FROM 18_8_ChartOfAccounts 
    LEFT JOIN 2_1_journal ON AccountNumber = DebitAccount 
    LEFT JOIN 18_6_TransactionPartners ON TransactionPartnerId = PartnerId 
WHERE VatReturnRowNumberForDebitTurnover = '61' AND Amount = 55