0

我有以下 SQL 语句:

SELECT   user_accounts.uacc_id,
         user_accounts.uacc_username,
         ride_rides.ride_type,
         ride_rides.ride_num_seats,
         ride_rides.ride_price_seat,
         ride_rides.ride_accept_nm,
         ride_rides.ride_split_cost,
         ride_rides.ride_from,
         ride_rides.ride_from_lat,
         ride_rides.ride_from_lng,
         ride_rides.ride_to,
         ride_rides.ride_to_lat,
         ride_rides.ride_to_lng,
         user_profiles.upro_image_name,
         ride_times.ridetms_id,
         ride_times.ridetms_return,
         ride_times.ridetms_depart_date,
         ride_times.ridetms_depart_time,
         ride_times.ridetms_return_date,
         ride_times.ridetms_return_time,
         depart_times.dpttme_text
FROM ride_times 
    LEFT JOIN ride_rides 
        ON ride_rides.ride_id = ride_times.ridetms_ride_fk 
    LEFT JOIN user_accounts 
        ON ride_rides.ride_uacc_fk = user_accounts.uacc_id
    LEFT JOIN user_profiles 
        ON user_profiles.upro_uacc_fk = user_accounts.uacc_id
    LEFT JOIN depart_times 
        ON depart_times.dpttme_id = ride_times.ridetms_depart_time
WHERE ride_times.ridetms_id = ?"

现在,我有查询从最后一个连接中的ride_times.ridetms_depart_time 中提取数据的文本表示,并且它工作正常。但是,我需要对ride_times 表中的另一列执行相同的操作。我想我需要使用别名,但是在阅读了有关别名的几个来源之后,我无法理解如何更改调用。

此外,对于本次通话中任何明显错误的反馈,可获得 100 分。这是我第一次尝试使用 JOIN。

保重,李

感谢我到目前为止收到的回复。以下是所涉及的表的结构:

CREATE TABLE `depart_times` (
`dpttme_id` int(11) NOT NULL,
  `dpttme_text` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`dpttme_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE `ride_rides` (
  `ride_id` int(11) NOT NULL AUTO_INCREMENT,
  `ride_uacc_fk` int(11) NOT NULL,
  `ride_date_added` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ride_type` tinyint(4) DEFAULT NULL,
  `ride_from` varchar(200) DEFAULT NULL,
  `ride_from_lat` float(10,6) DEFAULT NULL,
  `ride_from_lng` float(10,6) DEFAULT NULL,
  `ride_to` varchar(200) DEFAULT NULL,
  `ride_to_lat` float(10,6) DEFAULT NULL,
  `ride_to_lng` float(10,6) DEFAULT NULL,
  `ride_num_seats` tinyint(4) DEFAULT NULL,
  `ride_price_seat` float DEFAULT NULL,
  `ride_accept_nm` tinyint(1) DEFAULT '0' COMMENT 'accept non-monetary items',
  `ride_split_cost` tinyint(1) DEFAULT '0',
  `ride_notes` longtext,
  PRIMARY KEY (`ride_id`)
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=latin1;



CREATE TABLE `ride_times` (
  `ridetms_id` int(11) NOT NULL AUTO_INCREMENT,
  `ridetms_ride_fk` int(11) DEFAULT NULL,
  `ridetms_date_added` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ridetms_depart_date` date NOT NULL DEFAULT '0000-00-00',
  `ridetms_depart_time` tinyint(4) DEFAULT '0',
  `ridetms_return` tinyint(1) DEFAULT '0',
  `ridetms_return_date` date NOT NULL DEFAULT '0000-00-00',
  `ridetms_return_time` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`ridetms_id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;



CREATE TABLE `user_accounts` (
  `uacc_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uacc_group_fk` smallint(5) unsigned NOT NULL,
  `uacc_email` varchar(100) NOT NULL,
  `uacc_username` varchar(15) NOT NULL,
  `uacc_password` varchar(60) NOT NULL,
  `uacc_ip_address` varchar(40) NOT NULL,
  `uacc_salt` varchar(40) NOT NULL,
  `uacc_activation_token` varchar(40) NOT NULL,
  `uacc_forgotten_password_token` varchar(40) NOT NULL,
  `uacc_forgotten_password_expire` datetime NOT NULL,
  `uacc_update_email_token` varchar(40) NOT NULL,
  `uacc_update_email` varchar(100) NOT NULL,
  `uacc_active` tinyint(1) unsigned NOT NULL,
  `uacc_suspend` tinyint(1) unsigned NOT NULL,
  `uacc_fail_login_attempts` smallint(5) NOT NULL,
  `uacc_fail_login_ip_address` varchar(40) NOT NULL,
  `uacc_date_fail_login_ban` datetime NOT NULL COMMENT 'Time user is banned until due to repeated failed logins',
  `uacc_date_last_login` datetime NOT NULL,
  `uacc_date_added` datetime NOT NULL,
  PRIMARY KEY (`uacc_id`),
  UNIQUE KEY `uacc_id` (`uacc_id`),
  KEY `uacc_group_fk` (`uacc_group_fk`),
  KEY `uacc_email` (`uacc_email`),
  KEY `uacc_username` (`uacc_username`),
  KEY `uacc_fail_login_ip_address` (`uacc_fail_login_ip_address`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=latin1;



CREATE TABLE `user_profiles` (
  `upro_id` int(11) NOT NULL AUTO_INCREMENT,
  `upro_uacc_fk` int(11) NOT NULL,
  `upro_name` varchar(100) DEFAULT NULL,
  `upro_blackberry_id` varchar(200) DEFAULT NULL,
  `upro_yahoo_id` varchar(200) DEFAULT NULL,
  `upro_skype_id` varchar(200) DEFAULT NULL,
  `upro_gmail_id` varchar(200) DEFAULT NULL,
  `upro_image_name` varchar(200) DEFAULT 'default.jpg',
  PRIMARY KEY (`upro_id`),
  UNIQUE KEY `upro_id` (`upro_id`),
  KEY `upro_uacc_fk` (`upro_uacc_fk`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;

所以,澄清一下:

现在我正在根据ride_times.ridetms_depart_time 从depart_times 中提取一些文本。我还需要根据ride_times.ridetms_return_time 提取一些文本形式的depart_times。

4

2 回答 2

0

我想如果你已经加入了所有的表,只需将条件放在 WHERE 子句中就好了:

WHERE
ride_times.ridetms_id = ?
AND 
depart_times.column_name1 = ride_times.return_time

这回答了你的问题了吗?

好吧,我必须指出这一行:

LEFT JOIN depart_times ON depart_times.dpttme_id = ride_times.ridetms_depart_time

只是感觉架构有问题。但是,这也是我看到命名的猜测..

于 2013-02-21T07:31:46.360 回答
0

行,

经过大量搜索,我找到了这篇文章:

SELECT * 列的 MySQL 别名

我已将我的声明修改为以下内容,并且工作正常:

SELECT user_accounts.uacc_id,
                        user_accounts.uacc_username,
                        ride_rides.*,
                        user_profiles.upro_image_name,
                        ride_times.*,
                        dpt1.dpttme_text AS dep_text,
                        dpt2.dpttme_text AS ret_text
                FROM ride_times
                    LEFT JOIN ride_rides 
                        ON ride_rides.ride_id = ride_times.ridetms_ride_fk 
                    LEFT JOIN user_accounts 
                        ON ride_rides.ride_uacc_fk = user_accounts.uacc_id
                    LEFT JOIN user_profiles 
                        ON user_profiles.upro_uacc_fk = user_accounts.uacc_id
                    LEFT JOIN depart_times AS dpt1
                        ON dpt1.dpttme_id = ride_times.ridetms_depart_time
                    LEFT JOIN depart_times AS dpt2
                        ON dpt2.dpttme_id = ride_times.ridetms_return_time  
                WHERE ride_times.ridetms_id = ?

非常感谢所有试图帮助我的人。

保重,李

于 2013-02-21T09:02:38.597 回答