2016-05-06 10 views
0

機器レコードとそれに関連するデータを関連テーブルから取得するクエリを作成しようとしています。私は、where句内の任意の引数を渡さないとき、私もヌルレコードを含むすべてのレコードを取得し、[OK]mysqlを照会中にnull値を取得する方法

select e.Name,ec.Name as EquipmentClassName, s.Name as SiteName 
from equipment e 
left join site s on (e.SiteID = s.ID or e.SiteID is NULL and s.ID is NULL) 
left join equipmentclass ec on e.EquipmentClassID=ec.ID 
where e.id like '%' and (
    (isNull(e.Name) OR e.Name= CASE WHEN COALESCE('','') = '' THEN e.Name ELSE '' END) 
and (isNull(e.EquipmentClassID) OR e.EquipmentClassID= CASE WHEN COALESCE('1','') = '' THEN e.EquipmentClassID ELSE '' END) 
and (isNull(e.SiteID) OR e.SiteID= CASE WHEN COALESCE('','') = '' THEN e.SiteID ELSE '' END) 
) 

:。私のクエリは次のようです しかし、私はパラメータのいずれかを渡すときにすべてのレコードを再度取得します。私がここで期待しているのは、フィルタリングされたデータです。

と仮定私持っている二つのレコード句、私はクラス1を渡していますので、私は二つのレコードの代わりにCLASS1含む単一のレコードを取得する必要があり Equip1、class1に、ヌル、ヌルとEqui2、サイト2

で今

として。

どうすればいいですか?すなわち

EXEC equipmentData @Name='',@EquipmentClassID='', 
    @LocationID='',@ParentEquipmentID='',@EquipmentLevelID='',@SiteID='' 

F5キーを押し、最後の行を除いて上記のコードは、あなたのneed..youごとにsinglequotesにパラメータを渡すことで、最後の行のコードを実行

+0

タグを更新してください。 SQL ServerとMySQLでは、同じ問題に対して異なるソリューションが必要になることがよくあります。 –

+1

タグの問題で申し訳ありません。私が選んでいるタグに注意を払っていませんでした。私の間違い – Roy

+0

サンプルレコードとそのサンプルが生成すると予想される出力を提供できますか? SOには便利なサンプルデータを提供する便利なガイドがあります(http://stackoverflow.com/help/mcve)。私はこの質問をd​​ownvoteしなかったので、なぜ-1のスコアを持っているのか分からない。しかし、私が推測しなければならないことは、質問を読むのが難しいため、あなたがポイントを失ったと言います。 –

答えて

1
CREATE PROCEDURE equipmentData 
@Name     varchar(90) = null, 
@EquipmentClassID  varchar(90) = null, 
@LocationID    varchar(90) = null, 
@ParentEquipmentID  varchar(90) = null, 
@EquipmentLevelID  varchar(90) = null, 
@SiteID     varchar(90) = null 

AS 
BEGIN 

select e.ID, 
e.Name, 
ec.Name as EquipmentClassName, 
loc.Name as LocationName, 
    pe.Name as ParentEquipmentName , 
    eql.Name as EquipmentLevelName, 
    s.Name as SiteName, 
    ep.ID as EquipmentPropertyID, 
    ep.Name as EquipmentPropertyName, 
    ep.Description as EquipmentPropertyDesc, 
    ep.Mandatory, 
    ep.SeqNbr, 
    ep.DataType, 
    ep.RuleIDs, 
    ep.DefaultValue, 
    ep.UOM, 
    epv.Value 
from equipment e 
inner join equipmentclass ec   on e.EquipmentClassID=ec.ID 
left join site s      on (e.SiteID = s.ID or e.SiteID is NULL and s.ID is NULL) 
left join location loc     on e.LocationID=loc.ID 
left join equipment pe     on pe.ID=e.ParentEquipmentID 
left join equipmentlevel eql   on eql.ID = e.EquipmentLevelID 
left join extendedproperty ep   on ep.ObjectTypeID = e.ObjectTypeID 
left join extendedpropertyvalue epv  on epv.InstanceID = e.ID 
where 
e.id like '%' 
AND (e.Name    = @Name     or isnull(e.Name,'')= '') 
AND (@EquipmentClassID = @EquipmentClassID  or isnull(e.EquipmentClassID,'')= '') 
AND (@LocationID  = @LocationID   or isnull(e.LocationID,'')= '') 
AND (@ParentEquipmentID = @ParentEquipmentID or isnull(e.ParentEquipmentID,'')= '') 
AND (@EquipmentLevelID = @EquipmentLevelID  or isnull(e.EquipmentLevelID,'')= '') 
AND (@SiteID   = @SiteID    or isnull(e.SiteID,'')= '') 

END 

EXEC equipmentData @Name='',@EquipmentClassID='', 
@LocationID='',@ParentEquipmentID='',@EquipmentLevelID='',@SiteID='' 

最初のコピーは、あなたのデータを取得します。

+0

返事をお寄せいただきありがとうございます。私の知識が不足して申し訳ありませんが、私はwhere節にEquipmentClassIDを渡すことができますか? – Roy

+0

私はそれをあなたのクエリ....持っているあなたはT-SQLの良い知識を持っている場合はストアドプロシージャを作ることができますまたは単にあなたに更新コードを送信する変数を宣言するok –

+0

助けてくれてありがとうpankaj ..しかし、 SQL構文にエラーがあります。 '@Name varchar(90)= null、 @EquipmentClassID varchar(90行目2行目: – Roy

関連する問題