我有3個表格,如下所示,我想幫助的是理解連接(如果需要)執行以下查詢:mysql perl select加入和更新表格
我的產品是在產品表(id ,1)交易表(product_id,1)中也有它的tariff_id爲10.由於關稅表中的長度爲0,因此我沒有更新可用。
產品表(id,2)。它也可用於交易表(product_id,2)中,其關稅ID爲15.由於關稅表中的長度爲24(> 0),因此我需要將其更新爲1.
產品表(id,3 )在產品表和交易表中,但在交易表中它有2個與其關聯的關稅(25和10)。這次再次因爲關稅的長度是12(> 0),我需要更新爲1。
與上述產品表(ID,4)完全相同。
產品表(id,5)。不在交易表中,因此不需要更新。
Product table
-------------------------
id | pm_available
-------------------------
1 0
2 0
3 0
4 0
5 0
Deal Table
------------------------------------------
id | product_id | tariff_id
------------------------------------------
1 1 10
2 2 15
3 3 25
4 3 10
5 4 20
6 4 25
7 4 10
Tariff table
----------------------------
id | length
----------------------------
10 0
15 24
20 0
25 12
更新產品表應該是這樣的
Product table
-------------------------
id | pm_available
-------------------------
1 0
2 1
3 1
4 1
5 0
有超過3000的產品1萬筆。一個product_id可以出現在Deals表中數百次。所以我想如果我從Product Table中選擇一個產品傳遞到第二個查詢中,第二個查詢將檢查1)該產品是否存在於交易表中。 2)如果它存在與其關聯的關稅。 3)檢查關稅的長度是否大於0,如果是,則更新。
我有這個當前的腳本,但它不能正常工作,我不應該更新'可用'。
my $dbh = DBI->connect($dbiconnect,$dbiuser,$dbipass,{AutoCommit=>1,RaiseError=>1,PrintError=>0});
my $shh = $dbh->prepare(q{SELECT id FROM products }) or die $dbh->errstr;
my $ih = $dbh->prepare(q{UPDATE products SET available = ? WHERE id = ?}) or die $dbh->errstr;
my $sh = $dbh->prepare(q{
SELECT d.id
FROM deals d
JOIN tariffs t ON d.tariff_id = t.id
JOIN products p ON d.product_id = p.id
WHERE d.product_id = ?
AND t.length > 1
LIMIT 0,1
}) or die $dbh->errstr;
$shh->execute or die $dbh->errstr;
my @data;
while (@data = $shh->fetchrow_array()) {
my $id = $data[0];
$sh->execute("$id");
if($sh->rows > 0){
$ih->execute("1", "$id");
$ih->finish;
} else {
$ih->execute("0", "");
$ih->finish;
}
$sh->finish;
usleep($delay);
}
$shh->finish;
任何幫助將不勝感激。