簡體   English   中英

sql查詢兩次返回相同的值

[英]sql query is returning the same values twice

我有這個sql查詢,它應該返回兩個值,雖然確實如此,但它會返回兩次返回的行,sql看起來像這樣,

SELECT * FROM `mailers` 
  LEFT JOIN `mailer_content` ON `mailers`.`id` = `mailer_content`.`mailer_id` 
  LEFT JOIN `mailer_images` ON `mailer_content`.`id` = `mailer_images`.`content_id` 
WHERE `mailers`.`id` = 26

我正在查詢的表的表結構如下所示:

    -- --------------------------------------------------------

--
-- Table structure for table `mailers`
--

CREATE TABLE `mailers` (
  `id` int(11) NOT NULL auto_increment,
  `mailer_title` varchar(150) NOT NULL,
  `mailer_header` varchar(60) NOT NULL,
  `mailer_type` enum('single','multi') NOT NULL,
  `introduction` varchar(80) NOT NULL,
  `status` enum('live','dead','draft') NOT NULL,
  `flag` enum('sent','unsent') NOT NULL,
  `date_mailer_created` int(11) NOT NULL,
  `date_mailer_updated` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

-- --------------------------------------------------------

--
-- Table structure for table `mailer_content`
--

CREATE TABLE `mailer_content` (
  `id` int(11) NOT NULL auto_increment,
  `headline` varchar(320) NOT NULL,
  `content` text NOT NULL,
  `mailer_id` int(11) NOT NULL,
  `position` enum('left','right','centre') default NULL,
  `tab_1_name` varchar(25) default NULL,
  `tab_1_link` varchar(250) default NULL,
  `tab_2_name` varchar(25) default NULL,
  `tab_2_link` varchar(250) default NULL,
  `tab_3_name` varchar(25) default NULL,
  `tab_3_link` varchar(250) default NULL,
  `tab_4_name` varchar(25) default NULL,
  `tab_4_link` varchar(250) default NULL,
  `created_at` int(10) NOT NULL,
  `updated_at` int(10) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `mailer_id` (`mailer_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

-- --------------------------------------------------------

--
-- Table structure for table `mailer_images`
--

CREATE TABLE `mailer_images` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(150) NOT NULL,
  `filename` varchar(150) NOT NULL,
  `mailer_id` int(11) NOT NULL,
  `content_id` int(11) default NULL,
  `date_created` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49 ;

我敢肯定這是我的SQL問題,我只是不知道問題是什么

如果使用SELECT DISTINCT SQL不會返回重復的行(如果有的話)。

SELECT DISTINCT * FROM `mailers` LEFT JOIN `mailer_content` ON `mailers`.`id` = `mailer_content`.`mailer_id` LEFT JOIN `mailer_images` ON `mailer_content`.`id` = `mailer_images`.`content_id` WHERE `mailers`.`id` = 26

您可以使用group by smthng 它將刪除相同的記錄。 但是您可以刪除不一樣的行。 在原始表的不同行中使用不具有相同值的smthng。

嘗試這個

SELECT * FROM mailers左加入mailer_content ON mailers id = mailer_content mailer_id左加入mailer_images ON mailer_content id = mailer_images content_id mailers id = 26 GROUP BY mailers id

在我看來,這似乎不像是SQL。 我懷疑這更可能取決於您表中的數據。

我的猜測是,有兩排mailer_content其中mailers.id = 26 ,然后兩行(或可能1和3)在mailer_images每個的mailer_content秒。

以下每個查詢返回多少行?

SELECT * FROM `mailers`
WHERE `mailers`.`id` = 26  

SELECT * FROM `mailer_content`
WHERE `mailer_content`.`id` = 26

我的猜測是,第一個返回1行(因為它在id上具有主鍵),第二個返回兩行。

一切都很好,但是我的猜測是以下查詢返回了4條記錄:

SELECT * FROM `mailer_content`
LEFT JOIN `mailer_images` ON `mailer_content`.`id` = `mailer_images`.`content_id`
WHERE `mailer_content`.`id` = 26

因為每個內容都有兩個圖像,或者一個內容有一個圖像而另一個內容有三個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM