質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

1222閲覧

sqlで結合するとエラー

aizawal-hiroki

総合スコア56

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/02/16 06:27

二つのテーブルにそれぞれに結合作業をしたいです

sql

1 from 2 test1 , test2 3 inner join 4 contents A 5 on 6 test1.testid = name.id 7 8 inner join 9 contents B 10 on 11 test2.contentsid = name.id

という風に書いたところ

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from
test1 , test2

というエラーが出てきてしまいます。どうすればよろしいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/02/16 06:30

このSQLは全量ですか?一部ですか?
unz.hori

2018/02/16 06:37

いきなりnameテーブルが出てきてますが...
unz.hori

2018/02/16 06:38

あぁ、そこは特に問題ないのか
Zuishin

2018/02/16 06:47

select が無いからとかそういうオチじゃないでしょうね? 全部書いてください。
unz.hori

2018/02/16 06:51

"on"の前はテーブル名じゃないですか?
guest

回答2

0

MySQLでテストします

SQL

1create table tbl_a(aid int unique,xid int); 2insert into tbl_a values(1,11),(2,12),(3,12),(4,14); 3create table tbl_b(bid int unique,yid int); 4insert into tbl_b values(1,21),(2,22),(3,23); 5create table tbl_c(cid int unique,xid int,yid int); 6insert into tbl_c values(1,11,21),(2,11,22),(3,12,21),(4,12,21),(5,12,23),(6,13,21);
  • テスト1

tbl_aとtbl_bを無条件に結合
以下動作OK

SQL

1select * from tbl_a as a,tbl_b as b
  • テスト2

命題の結合
動作エラー

SQL

1select * from tbl_a as a,tbl_b as b 2inner join tbl_c as c1 on a.xid=c1.xid 3inner join tbl_c as c2 on b.yid=c2.yid

※考えられる理由:tbl_aとtbl_bを結合する条件がないため
(単純な結合ならいいがそれぞれにinner joinがカラムとNG)

  • 対処法1

SQL

1select * from tbl_a as a 2inner join tbl_b as b on 1 3inner join tbl_c as c1 on a.xid=c1.xid 4inner join tbl_c as c2 on b.yid=c2.yid
  • 対処法2

tbl_aとtbl_bを先に結合した後、tbl_cをjoinする

SQL

1select * from 2(select * from tbl_a as a,tbl_b as b) as sub 3inner join tbl_c as c1 on sub.xid=c1.xid 4inner join tbl_c as c2 on sub.yid=c2.yid
  • 対処法3

それぞれjoinしてから無条件結合
※この場合ワルドカードは使えない

SQL

1select * from 2(select aid,a.xid,c1.yid from tbl_a as a inner join tbl_c as c1 on a.xid=c1.xid) as sub1, 3(select bid,b.yid,c2.xid from tbl_b as b inner join tbl_c as c2 on b.yid=c2.yid) as sub2 4

投稿2018/02/16 07:33

yambejp

総合スコア114773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/02/16 07:35

端的に言えば「from test1 , test2」のような無条件な結合自体が やるべきではないということ
guest

0

SQLを実行するのに必要なCREATE TABLE くらい載せましょうね。
from からじゃなくて selectから欲しいです。

SQL

1from 2 test1 , test2

SQL

1from 2 test1 3inner join test2 4(left outer かも?)

name テーブルもjoinしているならその部分も載せては?
MySQL タグも欲しいです。
同じSQLでも方言が大きいですから、どのデータベースを使うのかをタグで明示した方が適切なコメントが付き易いです。 SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

投稿2018/02/16 06:53

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問