3
$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

4

5 に答える 5

4

これに対して 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 つのクエリを実行する必要があります。

于 2012-06-27T10:24:26.663 に答える
3

http://sqlfiddle.com/#!3/779da/1

次のこともできます。

select *
from tbl_ac, tbl_cc
where ac = 1 AND aa = 1 AND cc = 1

(データのヒープを戻す場合は、 EXISTS または COUNT(*) を使用できます)

于 2012-06-27T10:25:51.150 に答える
2
SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?  
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)
于 2012-06-27T10:26:24.770 に答える
1

一部のテーブルのみがリレーションを持つ場合は、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 ) 
";
于 2012-06-27T10:27:49.457 に答える
1
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.

于 2012-06-27T10:42:56.487 に答える