Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-如何执行多连接查询?_Mysql_Sql_Database_Join - Fatal编程技术网

MySQL-如何执行多连接查询?

MySQL-如何执行多连接查询?,mysql,sql,database,join,Mysql,Sql,Database,Join,我正在尝试连接两个表,但问题是出纳员表可以与sales表中的3个字段连接,如果我仅使用一个字段连接两个表,我不希望丢失任何记录。我只想得到出纳员表中的行数。我希望这是有道理的。这是我正在尝试做的一个例子 SELECT cashiers.cashierId,cashiers.name,cashiers.age, (SELECT (SELECT SUM(amount) * .20 FROM sales WHERE cashierId1 = cashiers.cashierId) + (SELEC

我正在尝试连接两个表,但问题是出纳员表可以与sales表中的3个字段连接,如果我仅使用一个字段连接两个表,我不希望丢失任何记录。我只想得到出纳员表中的行数。我希望这是有道理的。这是我正在尝试做的一个例子

SELECT cashiers.cashierId,cashiers.name,cashiers.age, 
(SELECT
(SELECT SUM(amount) * .20 FROM sales WHERE cashierId1 = cashiers.cashierId) + 
(SELECT SUM(amount) * .30 FROM sales WHERE cashierId2 = cashiers.cashierId) +
(SELECT SUM(amount) * .40 FROM sales WHERE cashierId3 = cashiers.cashierId)
) AS totalAmount
FROM cashiers

谢谢大家的帮助。

也许这就是你想要做的:

SELECT c.cashierId, c.name, c.age, 
       (SELECT SUM(CASE c.cashierId WHEN s.cashierId1 THEN 0.2 * s.amount
                                    WHEN s.cashierId2 THEN 0.3 * s.amount
                                    WHEN s.cashierId3 THEN 0.4 * s.amount
                   END)
        FROM sales
        WHERE c.cashierId IN (s.cashierId1, s.cashierId2, s.cashierId3)
       ) AS totalAmount
FROM cashiers c;

我认为戈登的答案可能是好的,但我认为它也假设只有一个出纳员会匹配。你可能一直在想象这样的事情:

select
    c.cashierid, min(c.name) as name, min(c.age) as age,
    sum(s1.amount * 0.2) + sum(s2.amount * 0.3) + sum(s3.amount * 0.4)
from
    cashiers c
    left outer join sales s1 on s1.cashierid1 = c.cashierid
    left outer join sales s2 on s2.cashierid2 = c.cashierid
    left outer join sales s3 on s3.cashierid3 = c.cashierid
group by
    c.cashierId

示例数据确实有助于澄清您正在做的事情。您可以一次加入多个字段。从表1中选择*a内部联接表2 b在a.column1=b.column1和a.col2=b.coll2上每个销售是否只计入一个出纳?许多出纳ID列很可能是糟糕的设计。因此,查询和表谓词的不必要复杂性将随之降低。只要有一个cashierID列&记录cashierID销售saleID的行,然后。。。。我们必须猜测,直到您为当前表给出这样一个谓词。销售萨利德。。。没有收银员做过,收银员ID1,收银员ID2和收银员ID3都是空的,或者只有收银员ID1做过,收银员ID2和收银员ID3都是空的,或者只有收银员ID1和收银员ID2和收银员ID3*做过,并且……你需要在总和中包含这个案例。我想那只是个意外。@shawnt00。非常感谢。