1

重複の可能性:
JoinとUnionの違いは何ですか?

個別のクエリを単一のSQLステートメントに組み合わせるにはどうすればよいですか?例:

SELECT packageid FROM tblhosting WHERE id='$id' AND userid='$userid'
SELECT id FROM tblcustomfields WHERE relid=tblhosting.packageid AND fieldname='foo'
SELECT value FROM tblcustomfieldsvalues WHERE fieldid=tblcustomfields.id AND relid='$id'

今、私はネストされたクエリを認識しているので、次のように書くことができます:

しかし、私はこのクエリを書くためのより良い方法があるかどうか疑問に思っていましたか?

[Update2] これは変数のないバージョンです。今回はもっと明確になることを願っています

SELECT packageid FROM tblhosting WHERE id='$id' AND userid='$userid'
SELECT id FROM tblcustomfields WHERE relid=tblhosting.packageid AND fieldname='foo'
SELECT value FROM tblcustomfieldsvalues WHERE fieldid=tblcustomfields.id AND relid='$id'

ここで私は興味があるだけですtblcustomfieldvalues.value

4

4 に答える 4

1

どうですか:

SELECT h.packageid, cf.id, cfv.value
FROM tblhosting h
INNER JOIN tblcustomfields cf ON (cf.relid = h.packageid)
INNER JOIN tblcustomfieldsvalues cfv ON (cfv.fieldid = cf.id)
WHERE h.id = '$serviceid'
  AND h.userid = '$userid'
  AND cf.fieldname = 'foo'
于 2012-06-18T23:06:19.143 に答える
1

INNER or LEFT JOIN必要に応じてご利用いただけます。

SELECT  c.value
  FROM  tblhosting a INNER JOIN tblcustomfields b
            ON b.relid = a.packageid
        INNER JOIN tblcustomfieldsvalues c
            ON c.fieldid = b.id
 WHERE  a.id = '$id'  AND   
        a.userid = '$userid' AND 
        b.fieldname = 'foo'
于 2012-06-18T23:42:11.810 に答える
0

3つのテーブルすべてに行が存在する場合にのみ、3つのテーブルすべてから行を取得する場合、これは私が望むと想定していることであり、SQLは次のようになります。

select
    a.id,
    b.value,
    c.packageid
from
    tbcustomfields a,
    tblcustomfieldsvalues b,
    tblhosting c
where
    c.userid='$userid'
    and a.relid=b.relid
    and a.relid=c.packageid
    and a.fieldname='foo'
    and b.fieldid=c.id
于 2012-06-18T23:05:54.297 に答える
0
SELECT
  tblcustomfieldvalues.value
FROM tblhosting
  LEFT JOIN tblcustomfields
    ON tblcustomfields.relid = tblhosting.packageid
      AND tblcustomfields.fieldname = 'foo'
  LEFT JOIN tblcustomfieldsvalues
    ON tblcustomfieldsvalues.fieldid = tblcustomfields.id
      AND relid = '$id'
WHERE tblhosting.id = '$id'
    AND tblhosting.userid = '$userid'

これを試して

于 2012-06-25T12:43:28.883 に答える