Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 - Fatal编程技术网

从两个表中选择数据,mysql

从两个表中选择数据,mysql,mysql,Mysql,我的数据库有两个表customer和transaction customer表有8列,transaction表有4列 客户表主键是id,在事务表中没有主键,每个客户在事务表中存在多条记录 我需要从customer中选择4列,从transaction中选择3列 以下是查询: query ='SELECT c.customer_id AS "Customer ID", c.father_name AS "Father Name", c.ad

我的数据库有两个表customer和transaction

customer表有8列,transaction表有4列

客户表主键是id,在事务表中没有主键,每个客户在事务表中存在多条记录

我需要从customer中选择4列,从transaction中选择3列

以下是查询:

query ='SELECT c.customer_id AS "Customer ID",
               c.father_name AS "Father Name",
               c.address AS Address,
               c.phone_number AS "Phone Number",
               c.mobile_number AS "Mobile Number",
               c.id_proof AS "ID Proof",
               c.area AS "Area",
               c.ip_address AS "IP Address",
               c.mac_address AS "MAC Address",
               c.package_type AS "Package Type",
               c.name AS Name,
               c.activation_date AS "Activation Date",
               c.status AS "Status",
               c.installation_cost AS "Installation Cost",
               c.totalamount_paid AS "Total Amount Paid",
               c.monthly_amount AS "Monthly Amount",
               c.lastpaid_date AS "Last Paid Date",
               c.lastpaid_amount AS "Last Paid Amount",
               c.nextpay_date AS "Next Pay Date",
               c.totaldue_amount AS "Total Due Amount",
               t.agent_id AS "Agent ID",
               t.token_number AS "Token Number",
               t.machine_id AS "Machine ID"
          FROM customer c INNER JOIN transaction t ON c.customer_id = t.customer_id
        WHERE DATE(t.paid_date)BETWEEN '" + fromDate + "'AND '" + toDate + "' ";
但问题是:

记录在事务表中存在多少次,这些次是它的给定记录,但我只需要一次

我该怎么做呢?

试试这个-

query = " ... ... ... GROUP BY c.customer_id";

您很可能希望对某些列求和或使用其他聚合函数。

问题在于您的查询逻辑。您可以从
transaction
表中选择三列。现在,对于一个客户,可以有多个交易。如果您正在选择
t.agent\u id
t.token\u number
t.machine\u id
,这将为您提供客户进行的每笔交易的这些值

如果您的业务逻辑允许,请从
select
列表中删除这三列,并使用
EXISTS
子句,而不是
内部联接,如下所示:

query ='SELECT c.customer_id AS "Customer ID",
               c.father_name AS "Father Name",
               c.address AS Address,
               c.phone_number AS "Phone Number",
               c.mobile_number AS "Mobile Number",
               c.id_proof AS "ID Proof",
               c.area AS "Area",
               c.ip_address AS "IP Address",
               c.mac_address AS "MAC Address",
               c.package_type AS "Package Type",
               c.name AS Name,
               c.activation_date AS "Activation Date",
               c.status AS "Status",
               c.installation_cost AS "Installation Cost",
               c.totalamount_paid AS "Total Amount Paid",
               c.monthly_amount AS "Monthly Amount",
               c.lastpaid_date AS "Last Paid Date",
               c.lastpaid_amount AS "Last Paid Amount",
               c.nextpay_date AS "Next Pay Date",
               c.totaldue_amount AS "Total Due Amount" /*,
               t.agent_id AS "Agent ID",
               t.token_number AS "Token Number",
               t.machine_id AS "Machine ID" -- */
          FROM customer c 
        WHERE EXISTS (SELECT 1
                        FROM transaction t
                       WHERE c.customer_id = t.customer_id
                         AND DATE(t.paid_date)BETWEEN '"
                                                        + fromDate
                                                        + "'AND '"
                                                        + toDate + "' "

现在,如果您的企业确实需要这三个值,您可以简单地使用
选择DISTINCT
,不再担心重复值。

query='SELECT c.customer\u id作为“customer id”,
c、 父亲的名字是“父亲的名字”,
c、 地址作为地址,
c、 电话号码为“电话号码”,
c、 手机号码为“手机号码”,
c、 身份证明为“身份证明”,
c、 面积为“面积”,
c、 ip_地址为“ip地址”,
c、 mac_地址作为“mac地址”,
c、 包装类型为“包装类型”,
c、 姓名作为姓名,
c、 激活日期为“激活日期”,
c、 状态为“状态”,
c、 安装成本作为“安装成本”,
c、 支付的总金额作为“支付的总金额”,
c、 每月金额为“每月金额”,
c、 lastpaid_日期为“Last Paid date”,
c、 上次支付金额为“上次支付金额”,
c、 下一个付款日期为“下一个付款日期”,
c、 总到期金额作为“总到期金额”,
t、 代理id为“代理id”,
t、 令牌号作为“令牌号”,
t、 机器id为“机器id”
从客户c内部连接事务t到c.customer\u id=t.customer\u id
其中日期(t.paid_DATE)介于“+fromDate+”和“+toDate+”之间

GROUP BY c.customer_id;

会限制1个适合您的需求吗?我可以在查询中保留在哪里为什么不使用
DISTINCT
?不是这样,它只给出第一条记录,我只希望每个客户有一条记录。我正在开发.net应用程序,我是否应该在上面的查询之后使用GROUP BY.if(reportsmachine.Text!=“”){query=query+”和“+”t.machine_id=“+””“+reportsmachine.Text+”;}如果(reportscustomer.Text!=”){query=query+”和“+”t.customer_id=“+”“+reportscustomer.Text+”;}这里有reportscustomer和reportsmachine是文本框。@SahilMittal-好吧,看来我比你早7分钟回答了这个问题,你刚刚编辑了你的答案,使之与我的相似。因此,如果它是正确的,我的答案就是被接受。提示:)在哪里使用DISTINCT in querySimple-ext to
SELECT
,如
query='SELECT DISTINCT c.customer\u id…
。您看起来对SQL很陌生。我建议你多做些家庭作业。转到w3schools.com的SQL教程。
query ='SELECT c.customer_id AS "Customer ID",
               c.father_name AS "Father Name",
               c.address AS Address,
               c.phone_number AS "Phone Number",
               c.mobile_number AS "Mobile Number",
               c.id_proof AS "ID Proof",
               c.area AS "Area",
               c.ip_address AS "IP Address",
               c.mac_address AS "MAC Address",
               c.package_type AS "Package Type",
               c.name AS Name,
               c.activation_date AS "Activation Date",
               c.status AS "Status",
               c.installation_cost AS "Installation Cost",
               c.totalamount_paid AS "Total Amount Paid",
               c.monthly_amount AS "Monthly Amount",
               c.lastpaid_date AS "Last Paid Date",
               c.lastpaid_amount AS "Last Paid Amount",
               c.nextpay_date AS "Next Pay Date",
               c.totaldue_amount AS "Total Due Amount" /*,
               t.agent_id AS "Agent ID",
               t.token_number AS "Token Number",
               t.machine_id AS "Machine ID" -- */
          FROM customer c 
        WHERE EXISTS (SELECT 1
                        FROM transaction t
                       WHERE c.customer_id = t.customer_id
                         AND DATE(t.paid_date)BETWEEN '"
                                                        + fromDate
                                                        + "'AND '"
                                                        + toDate + "' "