2

データベースに2つのテーブルがあります。1) tbl_lab_checkup 2) tbl_lab

tbl_lab には検査室のすべての記録があり、tbl_lab_checkup には検査室が提供する検査のすべての記録があります。

以下はテーブルのフィールドです

1) tbl_lab_checkup
-- labcheckupid (pk)
-- labid (fk)
-- checkupid (fk)
-- cost
-- discount

2) tbl_lab

--  labid (pk)
-- labname
-- labarea (fk)

'areaid'=1 と 'checkupid' が配列にあり、"," (1,2) で接続しています。

私が望むのは、配列内のすべての検査を提供する areaid=1 で利用可能なすべての lablist を取得することです (1,2)

次のクエリを試しましたが、間違った結果が得られました。

SELECT tlc .* FROM tbl_lab_checkup tlc
INNER JOIN tbl_lab lb ON 
tlc.labid = lb.labid
WHERE 
tlc.checkupid IN (1,2) AND lb.labarea=1
GROUP BY lb.labid

lab が配列で 1 つの ID しか提供しない場合でも、結果が返されます。誰でもこれに対する解決策を持っています。

フィドルをチェックしてください:http://sqlfiddle.com/#!2/5c674/1

4

3 に答える 3

1

私は通常、vinodadhikary による上記の提案に従いますが、別のオプションは、チェックごとに 1 つの JOIN を使用することです:-

SELECT lb.*
FROM tbl_lab lb
INNER JOIN tbl_lab_checkup tlc1 ON tlc1.labid = lb.labid AND tlc1.checkupid = 1
INNER JOIN tbl_lab_checkup tlc2 ON tlc2.labid = lb.labid AND tlc2.checkupid = 2
WHERE lb.labarea=1 

これは、すべての tbl_lab_checkup レコードの詳細が必要な場合に機能します

于 2013-07-05T14:20:40.713 に答える