如何通过从另一行 table 中选择一行来检索数据形式 table
How to retrieve data form table by choosing one row from another table
我有两个这样的table
我想编写 SQL 查询,当所有者是 John 时检索 FORD、MAZDA、TOYOTA
和另一个 SQL 查询以检索 MITSUBISHI 、 JEEP 、 HONDA 当车主是 Joseph 时。
我可以这样做吗?
你能帮帮我吗?
这是一个多对多关系
看看这个:
http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php
您需要添加一个枢轴 table 以将这两种实体类型连接在一起。
但首先你需要每个 table.
的主键
companies
---------
id PRIMARY KEY AUTO_INCREMENT
name VARCHAR NOT NULL UNIQUE
owners
------
id PRIMARY KEY AUTO_INCREMENT
name VARCHAR NOT NULL UNIQUE
现在是支点
companies_owners
----------------
company INT NOT NULL REFERENCES companies
owner INT NOT NULL REFERENCES owners
枢轴也应该在 company
、owner
上有一个唯一索引
在 phpmyadmin 中执行这些表并将其导入您的数据库
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Mar 15, 2016 at 02:06 PM
-- Server version: 5.6.17
-- PHP Version: 5.5.12
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `testing`
--
-- --------------------------------------------------------
--
-- Table structure for table `cars`
--
CREATE TABLE IF NOT EXISTS `cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` text NOT NULL,
`car` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `cars`
--
INSERT INTO `cars` (`id`, `owner_id`, `car`) VALUES
(1, '1255', 'FORD'),
(2, '1255', 'MAZDA'),
(3, '1255', 'TOYOTA'),
(4, '1455', 'MITSUBISHI'),
(5, '1455', 'JEEP'),
(6, '1455', 'HONDA');
-- --------------------------------------------------------
--
-- Table structure for table `owners`
--
CREATE TABLE IF NOT EXISTS `owners` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` text NOT NULL,
`owner` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dumping data for table `owners`
--
INSERT INTO `owners` (`id`, `owner_id`, `owner`) VALUES
(1, '1255', 'Jhon'),
(2, '1455', 'Joseph');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
然后执行下面这个查询
SELECT cars.*
FROM cars
JOIN owners
ON owners.owner_id = cars.owner_id
where cars.owner_id ='1455'
Order By cars.car ASC
现在您将了解完成您所要求的操作的基本方法
我有两个这样的table
我想编写 SQL 查询,当所有者是 John 时检索 FORD、MAZDA、TOYOTA 和另一个 SQL 查询以检索 MITSUBISHI 、 JEEP 、 HONDA 当车主是 Joseph 时。
我可以这样做吗?
你能帮帮我吗?
这是一个多对多关系 看看这个: http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php
您需要添加一个枢轴 table 以将这两种实体类型连接在一起。 但首先你需要每个 table.
的主键companies
---------
id PRIMARY KEY AUTO_INCREMENT
name VARCHAR NOT NULL UNIQUE
owners
------
id PRIMARY KEY AUTO_INCREMENT
name VARCHAR NOT NULL UNIQUE
现在是支点
companies_owners
----------------
company INT NOT NULL REFERENCES companies
owner INT NOT NULL REFERENCES owners
枢轴也应该在 company
、owner
在 phpmyadmin 中执行这些表并将其导入您的数据库
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Mar 15, 2016 at 02:06 PM
-- Server version: 5.6.17
-- PHP Version: 5.5.12
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `testing`
--
-- --------------------------------------------------------
--
-- Table structure for table `cars`
--
CREATE TABLE IF NOT EXISTS `cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` text NOT NULL,
`car` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `cars`
--
INSERT INTO `cars` (`id`, `owner_id`, `car`) VALUES
(1, '1255', 'FORD'),
(2, '1255', 'MAZDA'),
(3, '1255', 'TOYOTA'),
(4, '1455', 'MITSUBISHI'),
(5, '1455', 'JEEP'),
(6, '1455', 'HONDA');
-- --------------------------------------------------------
--
-- Table structure for table `owners`
--
CREATE TABLE IF NOT EXISTS `owners` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` text NOT NULL,
`owner` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dumping data for table `owners`
--
INSERT INTO `owners` (`id`, `owner_id`, `owner`) VALUES
(1, '1255', 'Jhon'),
(2, '1455', 'Joseph');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
然后执行下面这个查询
SELECT cars.*
FROM cars
JOIN owners
ON owners.owner_id = cars.owner_id
where cars.owner_id ='1455'
Order By cars.car ASC
现在您将了解完成您所要求的操作的基本方法