Mysql 多个左连接和或的SQL问题
我试图将上传到MySQL0的CSV连接到多个其他SQL表并创建输出,但我遇到了一个问题,即我从上传的CSV的第一个表中看到了我的数据,但它与现有MySQL表中的其他表不匹配。我检查以确保我离开连接的列的格式相同。问题是我在最终联接中使用OR语句,或者该语句是基本的模糊逻辑Mysql 多个左连接和或的SQL问题,mysql,sql-server,csv,join,Mysql,Sql Server,Csv,Join,我试图将上传到MySQL0的CSV连接到多个其他SQL表并创建输出,但我遇到了一个问题,即我从上传的CSV的第一个表中看到了我的数据,但它与现有MySQL表中的其他表不匹配。我检查以确保我离开连接的列的格式相同。问题是我在最终联接中使用OR语句,或者该语句是基本的模糊逻辑 $sql= "SELECT x.*, y.*, z.* FROM tbl_invoice as x LEFT JOIN conversion as y ON y.doc_sku = x.doc_sku LEFT JOIN t
$sql= "SELECT x.*, y.*, z.* FROM tbl_invoice as x LEFT JOIN conversion as y ON
y.doc_sku = x.doc_sku LEFT JOIN tbl_catalog as z ON z.distributor_sku = COALESCE(y.dist_sku, x.doc_sku) OR x.item_name like '%z.item_description%' WHERE x.timestamp IN (SELECT MAX(timestamp) FROM tbl_invoice)";
//echo $sql;die;
$result = $conn->query($sql);
$res = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$res[] = $row;
}
}
$html = "<table><tr><th>manufacturer</th><th>item_name</th><th>item_quantity</th><th>purchase_price</th><th>purchase_quantity</th><th>dist_sku</th><th>Total</th><th>item_description</th></tr>";
foreach($res as $key=>$val)
{
$html .="<tr><td>".$val['manufacturer']."</td><td>".$val['item_name']."</td><td>".$val['item_quantity']."</td><td>".$val['purchase_price']."</td><td>".$val['purchase_quantity']."</td><td>".$val['dist_sku']."</td><td>".($val['purchase_price']-$val['price'])*$val['purchase_quantity']."</td><td>".$val['item_description']."</td></tr>";
}
$html .="</table>";
echo $html;
unlink($inputFileName);
echo "<pre>";print_r($res);die;
} else {
echo "Sorry, there was an error uploading your file.";
}}?>
您的join-like语句没有按预期工作。它正在寻找字符串z.item_描述的文本副本。您的查询应该是
是不同公司生产的不同的、不相关的软件包。请使用正确的标签。@axiac不能说它们是无关的:p但这只是一个巨魔的评论@axiac嗯,当然不同,但我不能说它们无关
SELECT
x.*
, y.*
, z.*
FROM
tbl_invoice as x
LEFT JOIN conversion as y
ON y.doc_sku = x.doc_sku
LEFT JOIN tbl_catalog as z
ON z.distributor_sku = COALESCE(y.dist_sku, x.doc_sku)
OR x.item_name like concat('%', z.item_description, '%')
WHERE
x.timestamp IN (
SELECT
MAX(timestamp)
FROM
tbl_invoice
)