我有表'A',其中包含ID,名称,性别,帐号。表B具有ID,名称,性别,account_number等。表B存储有关不同帐户用户和号码的所有信息。我想要表A中具有account_number例如123456的行与表B中具有相同account_number的行匹配,然后打印表B中的所有信息。
我尝试这样做,但无法正常工作.........
<? php
require_once 'dbconfig.php';
$stmt = $db_con->prepare("SELECT * FROM trans INNER JOIN reg ON reg.Accnumber = trans.Transfer_id ");
$stmt->execute();
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<tr>
<td height="38"><?php echo $row['re_name']; ?></td>
<td><?php echo $row['Bank_name']; ?></td>
<td><?php echo $row['re_number']; ?></td>
<td>$<?php echo $row['re_amount']; ?></td>
<td><?php echo $row['swift_code']; ?></td>
<td><?php echo $row['t_date']; ?></td>
<td align="center">
<?php
请我需要帮助
最佳答案
你是说左加入?
从表A中选择所有值,然后仅在表A中有数据时才从表B中获取数据?
SELECT a.*, b.*
FROM a
LEFT JOIN b USING(account_number)
注意,第一个表应该是数据较少的表。
如果您的交易清单较小,并且想要获取帐户持有人的详细信息,则为:
SELECT *
FROM trans
LEFT JOIN reg ON reg.accnumber = trans.accnumber
WHERE reg.accnumber = '123456'
并且,如果您有客户的清单,并希望为其找到交易,请执行以下操作:
SELECT reg.*, group_concat(trans.transfer_id)
FROM reg
LEFT JOIN trans USING (accnumber)
GROUP BY reg.accnumber
并且您可以过滤该数据,但是如果您的客户有多个事务,则可能需要使用Have而不是Where:
SELECT reg.*, count(trans.transfer_id) as qty
FROM reg
LEFT JOIN trans ON reg.accnumber = trans.accnumber
GROUP BY reg.accnumber
HAVING reg.accnumber = '123456'
如果仅需要事务,则可以从一个表中请求它:
SELECT * FROM trans WHERE accnumber = '123456'
而且,如果您的表已规范化,则trans表中不应有accnumber字段,reg.id的唯一外键是,那么您的查询将是:
SELECT trans.*
FROM trans
LEFT JOIN reg ON reg.id = trans.user_id
WHERE reg.accnumber = '123456'