0

私は3つの値を持っています:

  • オブジェクト ID
  • ユーザーの電子メール
  • 利用者パスワード

そして2つのテーブル:

  • オブジェクト:

    • オブジェクト ID
    • ユーザーID
    • オブジェクト名
  • ユーザー:

    • ユーザーID
    • Eメール
    • パスワード

次の場合にオブジェクトの名前を選択したい:

  • ユーザーは有効です (メールとパスの戻り行)
  • オブジェクトがユーザーに属しているか、ユーザー ID = 0 を持っている (すべてのユーザーに属している)
  • object.id = オブジェクト ID

どのSQLステートメントでそれを得ることができますか?

4

5 に答える 5

1

テストされていませんが、動作するはずです。

SELECT 
    o.object_name 

FROM
    objects o
    LEFT JOIN users u ON o.user_id = u.user_id

WHERE
    o.objectId = 1
    AND (
        (u.email = ''
        AND u.password = '')
        OR o.user_id = 0
    )
于 2013-05-29T14:15:31.783 に答える
1
SELECT o.object_name FROM objects o
LEFT JOIN users u ON o.user_id=u.user_id
WHERE (u.email IS NOT NULL AND u.password IS NOT NULL)
OR o.user_id=0

object_name と object_id のどちらを意味しているのかわかりません。

于 2013-05-29T14:21:45.547 に答える
1

オブジェクト名のみを返す

SELECT object_name 
FROM objects o LEFT JOIN users u ON o.user_id = u.user_id
WHERE (u.email IS NOT NULL
AND u.password IS NOT NULL) 
OR user_id = 0
于 2013-05-29T14:18:32.383 に答える
0

テストしたい場合は、オブジェクトを SqlFiddle に入れます。

http://sqlfiddle.com/#!2/86023/9

SELECT O.ID FROM OBJECTS O

 WHERE O.ID IN  (
SELECT U.ID FROM USERS U
WHERE  U.USER = 'test' AND U.PASS = 'test'
)

OR O.USERID = 0
于 2013-05-29T14:28:06.470 に答える
0
SELECT 
   o.Name
FROM
   Objects o
LEFT JOIN
   Users u
ON
   u.Id = o.UserId
WHERE
   (u.Email = email
AND
   u.Password = password)
OR
   o.UserId = 0
于 2013-05-29T14:25:45.590 に答える