0

リンクとツアーの 2 つのテーブルを含むデータベースがあります。ツアーは次のように定義されます

+----+-------------+-----+-----+--------+---------+-------+---------+
| ID | FileName    | Lat | Lon | Name   | Heading | Width | Height  |
+----+-------------+-----+-----+--------+---------+-------+---------+

リンクは次のように定義されます

+-----+------------+--------+
| ID  | locationID | linkID |
+-----+------------+--------+

links.locationIDtour.ID への外部キーです。私がやりたいことは、特定のリンクに一致するすべてのリンクを取得することですtour.name

今、これら 2 つのクエリを実行し、最初の ID を 2 番目の変数として使用する必要があります。

SELECT * FROM tour WHERE tour.name = 'name'

SELECT * FROM tour
  INNER JOIN links ON tour.ID = links.linkID 
  WHERE links.locationID = ID of first query

これを単一の検索にどのように適応させることができますか?

サブクエリを試しました:

SELECT * FROM tour 
  INNER JOIN links ON tour.ID = links.linkID 
  WHERE links.locationID = ( SELECT * FROM tour WHERE tour.name = 'name')

これにより、オペランドに 1 つの列を含める必要があるというエラー 1241 が表示されます。

サブクエリの例をいくつか調べましたが、使用している内部結合ステートメントがすべて欠けています。このクエリにはどのような変更が必要ですか?

4

1 に答える 1

1
SELECT links.*, tour.*
FROM links
JOIN tour ON tour.ID = links.linkID
JOIN tour AS location ON location.ID = links.locationID -- you must create an alias, in order to refer to this table without ambiguity
WHERE location.name = 'name';

サブクエリを使用したバージョンについては、次のことができます。

SELECT * FROM tour 
INNER JOIN links ON tour.ID = links.linkID 
WHERE links.locationID = (
    SELECT ID -- "operand should contain one column"
    FROM tour WHERE tour.name = 'name'
);

ただし、最初のオプションを優先します。

于 2012-06-28T20:05:24.487 に答える