根据2个值连接一个表中的数据

时间:2013-02-21 07:19:06

标签: mysql sql

我有以下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。

2 个答案:

答案 0 :(得分: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

感觉,架构有问题。但是,这也是我看到这些诅咒的猜测。

答案 1 :(得分:0)

确定,

经过多次搜索后,我发现了这篇文章:

MySQL alias for SELECT * columns

我已将我的声明修改为以下内容并且它正常运行:

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 = ?

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

小心, 利