テーブルA
ID 依頼者  代理者
1 0001    0002
2 0001   0005
3 0004   0003

テーブルB
従業員ID 名前
0001   佐藤
0002   中村
0003   林
0004   高橋
0005   田中

このとき、テーブルAを素にして外部結合して
依頼者番号の欄には名前を入れるSQLを作りたいと思います。

外部結合をSQLで

SELECT 依頼者,代理者
FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.依頼者 = テーブルB.従業員ID

と行い、『依頼者』については、テーブルBから名前を引っ張ってこれたのですが、『代理者』列についても、テーブルBから名前を引っ張ってこれるようにしたいと思います。

色々試しましたが、分かりません。
お知恵をお貸しいただけると、嬉しいです。
どうぞ、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

なぜPHPの質問?


別名をつければいけませんか?

SELECT 依頼者,B1.名前 AS 依頼者名,代理者,B2.名前 AS 代理者名
FROM テーブルA AS A
LEFT JOIN テーブルB AS B1 ON A.依頼者 = B1.従業員ID
LEFT JOIN テーブルB AS B2 ON A.依頼者 = B2.従業員ID

この回答への補足

↓下記のお礼後、早速別名をつけて行ったところうまく行きました!

テーブルの別名で『AS』をつけるとうまくいかず…代わりにブランク
を空けてあげるとうまく行きました。(データベースによって変わるのかな?)

親切な回答とても感謝しています。
ありがとうございました。

補足日時:2009/05/14 13:45
    • good
    • 0
この回答へのお礼

すみません、説明不足でした。
SQLで抽出したものをPHPで表示させるようにしてます。

SQLの質問というカテゴリが無かったような気がしたので
すみません。

アドバイスありがとうございます!
別名ですね。早速やってみます!

お礼日時:2009/05/14 12:39

2重に外部結合ではいかがでしょうか?


対応のDBによっては直接出来ないかも知れませんが、

SELECT 依頼者, 名前, 代理者, 名前
FROM (
SELECT 依頼者,代理者
FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.依頼者 = テーブルB.従業員ID ) テーブルC
JOIN テーブルB ON テーブルC.代理者 = テーブルB.従業員

と言うような。

もっとスマートの解決法があれば、私も知りたいところです。
    • good
    • 0
この回答へのお礼

二重に外部結合は試して色々模索したのですが
うまく行きませんでした。

ですが、kuma_vi_maさんが書いてくれた例はまだ行ってませんので
やってみます!

ありがとうございます!

お礼日時:2009/05/14 12:41

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q3Pや複数プレイについて(女性の方のみ)

僕の彼女がかなりの浮気性でそれもどうも複数プレイを楽しんでるセフレが何人かいるみたいです。女性はみんな複数プレイに興味があるのでしょうか?男性二人に攻められるのがそんなにきもちがいいのでしょうか?彼氏がいるいないにかかわらず。宜しくお願いします。

Aベストアンサー

女性すべてが複数プレイは興味ないと思いますよ。

ちなみに私は興味があってやったことがありますが、気持ちいいですね。
ただし、3Pが限度ですが^^;
あとは好きな人と知らない人との3Pはいやですね。
好きな人とか彼氏の前でほかの男に抱かれるのはいやです。
だからただのセックスを相談者様の彼女は楽しんでいるような気がします。
なんにせよ、彼女はあなたに複数プレイをばらしていることは少しどうかと思います。

Qphoto.php?id=0001 このようなリンク形式で表示したい

アルバムサイトをPHPで作成しています。
index.phpには風景写真のサムネイルをずらっとならべて、サムネイルをクリックすると写真の詳細ページ photo.php に移動するようにしたいと思っています。
その際には photo.php?id=0001 のようなリンク形式でそれぞれの写真の詳細ページを表示したいのですが、どのようにしたら可能でしょうか?
また、写真の説明文や写真のファイル名などのデータはMySQLに保存してあります。

参考になるページやスクリプトがありましたら是非教えて頂けると助かります。
よろしくお願いします。

Aベストアンサー

//photo.php
<?php
$id = $_GET["id"];
$sql = "select title ,memo,image from tablename where id = ".= $id;
$result = mysql_query($sql);

・//while文などで$resultからデータ内容を各変数に入力

?>
あとは変数に入力した値を同じページでHTML出力する。

Q複数プレイ

33歳、独身、OLです。

私は性欲が強い方で、今は特定の男性がいませんので、性欲を解消するのに苦労しています。基本的にはオナニーが中心です。

オナニーをする時はいつも変態的なことを妄想するのですが、最近は、複数の男性に犯されることを想像したり、ネットでそういう動画を見ながらしています。
妄想だけならよいのですが、実際にそういうプレイにあこがれてしまいます。
実は学生時代に男性2人とプレイしたことがあります。そのことを思いながらオナニーすることもたびたびあります。

ネットで見ると、そういう希望の女性が参加するサイトもあるようです。私のような希望を持っている女性もいることに少し安心しましたが、そういうサイトで経験したいとも思うようになりました。

そこで、複数プレイの希望を持っている女性の方、複数プレイを経験をされた方、実際にそのようなサイトで経験された方など、アドバイスがありましたらお願いします。

Aベストアンサー

私も同じような経験を何回か経てきました。でもいざ特定の彼氏が出来た時に、やっぱり複数Pの経験が思い出されて忘れることが出来なくて結局は彼氏が居るのに元彼とその友達と飲みに行っては、複数Pを楽しむ事が多くて。本当は本命君を交えて複数Pをしたいのです。私は単にHが本当に好きで。小学校の時からHな事を考えたり。Tバック穿いて露出したりしてきましたから、相当なんだと思う。友達も乱交仲間が居て、やっぱり気持ちよいものは気持ち良いので、我慢出来ない!と言うのが結論です。浮気と言う感覚では無くて、その時だけ本気!そんな感じで、でも理解してくれる彼氏ってなかなかいない・・・。

QThe session id contains invalid characters,valid characters are only a-z, A-Z an

お世話になります。
 Linux + Apache 2.0 + PHP Version 4.3.2 を使用しています。
 
 携帯から使用していると、ごくたまに
「Warning: session_start(): The session id contains invalid characters,
valid characters are only a-z, A-Z and 0-9 in」というエラーが出てしまいます。

 セッションIDとして使われる文字列が不正という事だと思うのですが、人為的にセッション変数を触らない限り、このような事は起きないものかと認識しておりましたが、違うのでしょうか?
 その辺の記述が探し出せず、困っています。 

 この辺り、ご経験がある方、ご教示いただけると助かります。

Aベストアンサー

idをGETで渡しているのであれば、単純にGETの最大長を超えているとかですかね。

公式サイトである場合、各社ともuidを取得するためにパラメータをGWで勝手に付加したりしますし
// 公式サイトでsession_id引き回しなどはしないと思いますけども^^;;
意図しないところでパラメータが切れたりなどする可能性はあります。

GWの仕様が現在どうなっているか知りませんが、パラメータ名が既に定義されているものだったりすると
上書きされてしまったりする可能性もありますね。(uidとか)

ともあれ、エラーケースのsession_idにascii以外の文字が本当に入っているかどうか、
実際に渡っている文字列は何なのか確認する必要があるかと思います。

正常なidでかつエラーが出る状況・・・だとcoreのbugかも知れませんね・・・

Q1枚で複数人プレイ出来るNDSソフト(RPG限定)?

ニンテンドーDSの下記ソフトは1枚で4人通信プレイ出来るのでしょうか?
■ドラゴンクエストIX 星空の守り人
■ファンタシースター ZERO
調べても出てこないので多分無理だとは思うのですが、知ってる方いらっしゃれば教えて頂けると助かります。

あと、1枚で複数人プレイ出来るソフトは何かありますか?
RPG限定でお願いします。

Aベストアンサー

PS0もドラクエIXも、オンライン、オフラインに関わらず、人数分のDSとソフトがそれぞれ必要です。
ソフト1枚で複数人プレイができるゲームは、桃鉄などに限られていて、RPGにはないはずです。

QウィンドウA⇒ウィンドウB⇒ウィンドウA

こんにちは。
ウィンドウA(index.php)から新しいウィンドウB(sub.php)を
開き(ウィンドウAは閉じない。2つのウィンドウが表示されて
いる状態)、sub.phpのフォームでsubmitすると、sub.phpは閉じ、
フォームで入力した値を用いてindex.phpを更新したいのですが、
良い方法は御座いませんでしょうか。

現在問題となっているのは、sub.phpで値を入力した後、index.php
に値を渡し更新することが出来ないことです。

新規にindex.phpを開いたり、現在のページを更新しindex.phpを
開く事は出来るのですが…

よろしくお願いします。

Aベストアンサー

これは、PHPではなくJavaScriptのお話でしょうか?

【index.html】
<html>
<head>
<script type="text/javascript">
function openWindow() {
window.open("sub.html", "new", "");
}
</script>
</head>
<body>
<form method="post" id="frm" action="index.html">
<div id="message"></div>
<p />
<input type="button" value="子ウィンドウ" onclick="openWindow()" />
</form>
</body>
<html>

【sub.html】
<html>
<head>
<script type="text/javascript">
function closed() {
window.opener.document.getElementById("message").innerHTML=document.getElementById("message").value;
//親ウィンドウをサブミットしたい時
//window.opener.document.getElementById("frm").submit();
window.close();
}
</script>
</head>
<body>
<input type="text" id="message" size="50" value="子ウィンドウで操作された文字列" />
<input type="button" value="閉じる" onclick="closed()" />
</body>
</html>

こういうことですか?

これは、PHPではなくJavaScriptのお話でしょうか?

【index.html】
<html>
<head>
<script type="text/javascript">
function openWindow() {
window.open("sub.html", "new", "");
}
</script>
</head>
<body>
<form method="post" id="frm" action="index.html">
<div id="message"></div>
<p />
<input type="button" value="子ウィンドウ" onclick="openWindow()" />
</form>
</body>
<html>

【sub.html】
<html>
<head>
<script t...続きを読む

QiTUNESで複数のプレイリストをCDに焼きたいです

こんばんは。自力で方法を探してましたが一時あきらめたのですがどうしてもあきらめきれなくこの場を借りて質問させていただきます。

僕は主にカーステレオでCDを聴きます。
カーステはmp3対応なのでiTUNESを利用してデータ形式で焼き聴いています。
iTUNESが便利なのは焼くときにファイル名に曲番号を自動で振ってくれるところです。
カーステではmp3ファイルを再生するとき、必ず名前の順になってしまうので。(これが作成日時順で再生できれば最高なんですがあいにくできません。)

ただ、iTUNESの場合、一つのプレイリストのみしか焼けませんよね?

僕は複数のプレイリストを選択してそれをCDRに焼きたいです。

例えば以下の2つのプレイリストがあります。
abc
def

2つのプレイリストにはそれぞれ10曲ずつ入ってるとします。

その2つのプレイリストを選択してCDRに焼く。
焼いたCDRの中身は
abc
def
のプレイリスト名で2つのフォルダが出来上がっていてそれぞれを開くと曲順がファイル名の先頭に01~10までが追加されている。

これができればすごいうれしいです。
一言でゆえばCDR1枚でアルバム5枚ぶん程度の内容がつめられる。ってことになります。

どなたかiTUNESを利用してできる方法、もしくはiTUNES以外でこのようなことが出来るソフトを知っている方がいましたら教えてください。
よろしくお願いいたします。

OSはWINDOWS XP SP2 です。

こんばんは。自力で方法を探してましたが一時あきらめたのですがどうしてもあきらめきれなくこの場を借りて質問させていただきます。

僕は主にカーステレオでCDを聴きます。
カーステはmp3対応なのでiTUNESを利用してデータ形式で焼き聴いています。
iTUNESが便利なのは焼くときにファイル名に曲番号を自動で振ってくれるところです。
カーステではmp3ファイルを再生するとき、必ず名前の順になってしまうので。(これが作成日時順で再生できれば最高なんですがあいにくできません。)

ただ、iTUNESの場...続きを読む

Aベストアンサー

なるほど、iTunesが出てきたので誤解しましたね。
iTunesはWAVでしか書いていないはずですから。

結局、要望は、フォルダごとに、指定した順序にファイル名の
先頭に連番を付けたい、ということですね。しかも、コピーで、
という条件ですね。

残念ながら、そのようなソフトは見たことも聞いたこともあり
ません。ライティングソフトにそのような機能を求めるべきか
どうかも判断が難しいですね。
自分の要望だったら、プログラムを作りますけど。半日くらいかな。
かなり特殊なので一般には出ないかもしれませんね。

そんなプログラムが出るまでは、mp3をコピーして、コピー先で
手でファイル名変更するしかないでしょう。

Q@$a = $b["c"] or $a = "text"; という記述の仕方

これは $a = b["c"] がエラーだったら$aに"text"を代入できるので楽なんですが、
あまり使わない方がいい構文なのでしょうか?

配列の存在チェックをしていて
if(isset($b["c"])){
$a = $b["c"];
}else{
$a = "text";
}
こちらの方がいいのでしょうか?
or の使い方が検索してもイマイチ分からないのです

@はエラーが発生しているのに、それを表示しない方法だと認識しています
だからエラーを出さないのが正しい記述なのであれば、後者が正しいのかと思ったり
1行で収まる上に、一応構文として理解も難しくないので問題ないのかなと思ったり

タイトルの記述方法が不適切なのかどうかと、orの適切な使い方、@はあまり使わない方がいいのかを教えてください
本やネットで検索してみたのですが、どうしてもヒットしません
検索で分かるのでしたら、どのような検索の仕方がいいか教えてください!
お願いします。

Aベストアンサー

@$a = $b["c"] or $a = "text";

if(isset($b["c"])){
$a = $b["c"];
}else{
$a = "text";
}
では$b["c"] = 0の時の動作が違いますね
上の式と同じにするなら
if(isset($b["c"]) and $b["c"]){
または
if(!empty($b["c"])){
になると思います
@は自分も関数の頭に使うことはたまにあります。使わない方がいいとは思いません。

@がないと$b["c"]が未定義の場合にNoticeエラーとなります。

QiTunes で複数のプレイリストを扱うとチェックが同期してしまう。

MacMini(OS10.3.9) + iTunes (MAC OSX版 6.0.1) + iPod nano + iPod 10G(M8737J/A)の環境です。

以前から使っているiPod10Gに、最近nanoを買い足しました。
10gとnanoという2つのプレイリストを作って、それぞれのiPodへ同期して転送していました。
しかし、同じ曲が両方のプレイリストに含まれている場合、10gの方でチェックを外すと、nanoのチェックも外れてしまいます。片方だけチェックする事ができません。

不要な場合は曲を削除するしかないのでしょうか?
チェックの使い方が悪いのかもしれません。

よろしくお願いします。

Aベストアンサー

> チェックマークがプレイリスト毎に管理されていれば便利だなーと思って聞いてみましたが、やっぱりそこまでは出来ないみたいですね。

どうしてもとおっしゃるのなら、ライブラリ上で曲をコピーしてふたつにしてください。
ライブラリでコピーしたい曲を選択し、詳細設定メニューの「選択項目をxxxに変換」を実行すると、コピーされます。
プレイリストに別のものを入れると、チェックボックスも別に操作できるようになります。

Q下記バグ("SQL:\"$sql\"の実行に失敗しました。")が表示されます

※以下プラグラムが走りません。どこに問題があるか教えて下さい。
<?php
/*==
  ユーザ履歴確認  dis_career.php
==*/
session_start();


print <<<EOD
<HTML>
<HEAD>
<TITLE>ユーザ履歴の表示</TITLE>

EOD;


//データベースに接続する
$con = mysql_connect("","","");
$selectdb = mysql_select_db("",$con);

if ($con == false) {
print("データベースに接続できませんでした。");
exit;
}
$sql = "select * from tbl_user order by uid'";
$result = mysql_query($sql,$con);

if ($result == false) {
printf("SQL:\"$sql\"の実行に失敗しました。");
exit;
}
$rows = mysql_num_rows($result); //行数を取得
printf("<CENTER><H2><ユーザ履歴確認></H2></CENTER>");
print("<table border=\"1\" align=\"center\" >\n");
print("<TR><TH><ユーザID></TH><TH>名前</TH><TH>コース名</TH><TH>履歴表示</TH></TR>\n");
if ($rows > 0){
for ($j = 0;$j < $rows;$j++) {
print("<FORM ACTION=\"career.php\" METHOD=\"post\" TARGET=\"right\">");
$data=mysql_fetch_object($result);
$uid=$data->uid;
$name=$data->name;
$course=$data->course;
print("<TR>");
print("<TD>$uid</TD>");
print("<TD>$name</TD>");
print("<TD>$course</TD>");
print("<INPUT TYPE = \"hidden\" NAME = \"uid\ VALUE=\"$uid\">");
print("<TD><INPUT TYPE = \"submit\" NAME = \"career\ VALUE = \"履歴表示\"></TD>");
print("</TR>");
print("</FORM>");
}
}

?>

</BODY>
</HTML>

※以下プラグラムが走りません。どこに問題があるか教えて下さい。
<?php
/*==
  ユーザ履歴確認  dis_career.php
==*/
session_start();


print <<<EOD
<HTML>
<HEAD>
<TITLE>ユーザ履歴の表示</TITLE>

EOD;


//データベースに接続する
$con = mysql_connect("","","");
$selectdb = mysql_select_db("",$con);

if ($con == false) {
print("データベースに接続できませんでした。");
exit;
}
$sql = "select * from tbl_user order by uid'";
$result = mysql_query($sql...続きを読む

Aベストアンサー

エラー情報を表示させてみましょう
if ($result == false) {
printf("SQL:\"$sql\"の実行に失敗しました。");
print mysql_error();
exit;
}


人気Q&Aランキング