1

私はテーブルを持っています

 unam     fnam

 john     alex
 alex     john

unam 'john' == fnam 'alex' または unam 'alex' == fname 'john' の場合に true を返すクエリが必要です

単一のクエリでそれを行う方法がわかりません。私のコード

$re = mysql_query("SELECT 1 FROM tab WHERE unam='john' and fnam='alex' LIMIT 1"); 
$ir = mysql_query("SELECT 1 FROM tab WHERE unam='alex' and fnam='john' LIMIT 1"); 

if ((!(mysql_num_rows($re))) && (!(mysql_num_rows($ir)))) echo 'not exists';

2 つの個別のクエリを実行しました (1 つは for でunam 'john' == fnam 'alex'、もう1 つは forunam 'alex' == fname 'john'です。両方のクエリに行がない場合、エコーは存在しません。

単一のクエリに最適化できるのではないかと考えていました。

4

5 に答える 5

5

OR 条件を実行して、複数の異なる条件を確認できます。

SELECT 1 
FROM tab 
WHERE (unam='john' and fnam='alex') 
    OR (fnam='john' and unam='alex') 
LIMIT 1
于 2013-07-02T18:17:41.797 に答える
2

これを実現するには、 ORステートメントを使用できます。

これを試して:

mysql_query("SELECT 1 
FROM tab 
WHERE 
(unam='john' and fnam='alex') 
OR 
(unam='alex' and fnam='john')
limit 1");
于 2013-07-02T18:20:33.873 に答える
2

where次のように句にロジックを入れることができます。

select 1
from tab
where (uname = 'john' and fname = 'alex') or
      (fname = 'alex' and uname = 'john')
limit 1

ところで、常に値を返したい場合、たとえば0または1、集計を使用できます。

select coalesce(max(1), 0) as retval
from tab
where (uname = 'john' and fname = 'alex') or
      (fname = 'alex' and uname = 'john')

行が選択されていない場合、 がmax()返さNULLれ、coalesce()が に変わります0

于 2013-07-02T18:18:12.777 に答える
1

EXISTS を使用した別のアプローチと別の構文:

SELECT
  EXISTS (SELECT NULL FROM names
          WHERE (unam, fnam) IN (('john', 'alex'),('alex','john')))

ここでフィドルを参照してください。

于 2013-07-02T18:25:46.610 に答える
1
$re = mysql_query("SELECT COUNT(*) FROM tab WHERE (unam='john' and fnam='alex') OR (unam='alex' and fnam='john')");
于 2013-07-02T18:18:22.233 に答える