$query1 = "SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?";
と
$query2 = "SELECT id, cc FROM tbl_cc WHERE cc = ?";
たった 1 つのクエリでこれら 2 つのクエリに最も相当するものは何ですか? INNER JOIN
各テーブルには関係がないため、これでは使用できません。
がデータベースに存在するac
かどうかaa
を確認したいだけです。cc
これに対して 1 つのクエリが必要な場合は、次のように実行できます。
SELECT id, ac, aa, NULL as cc FROM tbl_ac WHERE ac = ? AND aa = ?
UNION ALL
SELECT id, NULL, NULL, cc FROM tbl_cc WHERE cc = ?
しかし、私はお勧めしません。
クエリがまったくリンクされていない場合は、2 つのクエリを実行する必要があります。
http://sqlfiddle.com/#!3/779da/1
次のこともできます。
select *
from tbl_ac, tbl_cc
where ac = 1 AND aa = 1 AND cc = 1
(データのヒープを戻す場合は、 EXISTS または COUNT(*) を使用できます)
SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)
一部のテーブルのみがリレーションを持つ場合は、LEFT JOIN を使用できます。これにより、テーブルが結合され、リレーションがない場合は NULL が埋められます。
$query = "
SELECT tbl_ac.id, tbl_ac.ac, tbl_ac.aa
FROM tbl_ac
LEFT JOIN tbl_cc ON ( tbl_cc.cc = tbl_ac.ac )
";
SELECT EXISTS (SELECT * FROM tbl_ac WHERE ac = ? AND aa = ?)
AND EXISTS (SELECT * FROM tbl_cc WHERE cc = ?)
Will return TRUE if both EXISTS
predicates return TRUE, and FALSE otherwise. Note that you don't need to specify columns in an EXISTS
subquery. The EXISTS
predicate only tests for the existence of rows.