1

次のように構造化されたMySQLデータベースに次の3つのテーブルがあります。

tblinvoices

ユーザー ID | ID | 税率 | 日にち

tblinvoiceitems

ユーザー ID | リッド

tblcustomfieldvalues

リッド | 値 | フィールド ID

私がやろうとしているのは、特定の日付範囲内にあり、税率が 0 で、fieldid が 5 で値が文字を含むすべての請求書番号 (tblinvoices.id) を見つけることです。

これは、これを達成するためにコードを使用した距離ですが、残念ながら機能していません。その理由はわかりません。これはかなり複雑であることを知っているので、アドバイスをいただければ幸いです。これに対する私の方法が正しいかどうかはわかりません。

SELECT DISTINCT id, date  
FROM `tblinvoices`  
INNER JOIN (SELECT userid,tblinvoiceitems.relid  
FROM  `tblinvoiceitems`  
INNER JOIN `tblcustomfieldsvalues`  
ON tblinvoiceitems.relid=tblcustomfieldsvalues.relid  
WHERE  `fieldid` =5  
AND  `value`   
REGEXP  '[A-Za-z]') tbl  
ON tblinvoices.userid=tbl.userid  
WHERE `taxrate` = 0  
AND `date`  
BETWEEN  '2012-07-01' AND '2012-09-31'  

単純化されていますが、まだ正しい結果ではありません:

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
INNER JOIN `tblinvoiceitems`  it ON it.userid=i.userid
INNER JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE  cf.`fieldid` =5  
AND  cf.`value` REGEXP  '[A-Za-z]'
AND i.`taxrate` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  
GROUP BY i.id
4

1 に答える 1

2

クエリを単純化しています。これを試して

SELECT i.id, i.date  
FROM `tblinvoices` i
INNER JOIN `tblinvoiceitems`  it ON it.userid=i.userid
INNER JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE  cf.`fieldid` =5  
AND i.`taxrate` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  
GROUP BY i.id

これがうまくいくことを願っています

于 2012-10-11T15:27:49.590 に答える