मेरे एसक्यूएल सिंटैक्स में समस्या मुझे त्रुटि मिलती है:

ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.9]Not unique table/alias: 'WallPosting'

कोड:

{

    string theUserId = Session["UserID"].ToString();
    using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=x; Password=x;"))
    {
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand("SELECT WallPosting.Wallpostings FROM WallPosting LEFT JOIN WallPosting ON User.UserID = WallPosting.UserID WHERE User.UserID=" + theUserId + "", cn))
// problem in select statement

        using (OdbcDataReader reader = cmd.ExecuteReader())
        {
            var divHtml = new System.Text.StringBuilder("<div id=mysqlcontent>");
            while (reader.Read())
            {
                divHtml.Append(String.Format("{0}", reader.GetString(0)));
            }

            divHtml.Append("</div>");
            test1.InnerHtml = divHtml.ToString();

        }
    }
}

मेरी एसक्यूएल स्क्रिप्ट और टेबल संरचना: यहां छवि विवरण दर्ज करें

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `gymwebsite2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `gymwebsite2` ;

-- -----------------------------------------------------
-- Table `gymwebsite2`.`User`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`User` (
  `UserID` INT NOT NULL AUTO_INCREMENT ,
  `Email` VARCHAR(245) NULL ,
  `FirstName` VARCHAR(45) NULL ,
  `SecondName` VARCHAR(45) NULL ,
  `DOB` VARCHAR(45) NULL ,
  `Location` VARCHAR(45) NULL ,
  `Aboutme` VARCHAR(1045) NULL ,
  `username` VARCHAR(45) NULL ,
  `password` VARCHAR(45) NULL ,
  PRIMARY KEY (`UserID`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `gymwebsite2`.`WallPosting`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`WallPosting` (
  `idWallPosting` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  `Wallpostings` VARCHAR(2045) NULL ,
  PRIMARY KEY (`idWallPosting`) ,
  INDEX `fk_WallPosting_User` (`UserID` ASC) ,
  CONSTRAINT `fk_WallPosting_User`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite2`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `gymwebsite2`.`Pictures`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`Pictures` (
  `idPictures` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  `picturepath` VARCHAR(1045) NULL ,
  PRIMARY KEY (`idPictures`) ,
  INDEX `fk_Pictures_User1` (`UserID` ASC) ,
  CONSTRAINT `fk_Pictures_User1`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite2`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
0
G Gr 23 मार्च 2011, 14:03
मुझे लगता है कि समस्या यह है कि लेफ्ट जॉइन यह सुनिश्चित नहीं है कि इसे कैसे चुना जाए या यदि इसकी आवश्यकता भी है?
 – 
G Gr
23 मार्च 2011, 14:05

3 जवाब

सबसे बढ़िया उत्तर

अपनी क्वेरी सही करें

      SELECT WallPosting.Wallpostings FROM WallPosting LEFT JOIN USER ON User.UserID = WallPosting.UserID WHERE User.UserID=" + theUserId + "", cn

तुमने क्या किया था

              WallPosting LEFT JOIN WALLPOSTING ON User.UserID = WallPosting.UserID 
1
Furqan Hameedi 23 मार्च 2011, 14:08

जब आप सेल्फ-जॉइन करते हैं (एक टेबल से खुद जुड़ते हैं), तो आपको कम से कम एक टेबल इंस्टेंस को एक उपनाम देना होगा ताकि SQL को पता चल सके कि आप किसी भी समय किस इंस्टेंस के बारे में बात कर रहे हैं। ... LEFT JOIN WallPosting AS a ON ... जैसा कुछ, तब a.WallPosting का उपयोग करें जब आपका मतलब जॉइन टेबल से हो।

2
geekosaur 23 मार्च 2011, 14:07

क्या यह नहीं होना चाहिए

"SELECT WallPosting.Wallpostings FROM WallPosting LEFT JOIN User ON User.UserID = WallPosting.UserID WHERE User.UserID=" + theUserId + ""

आप फिर से WallPosting तालिका में शामिल हो रहे हैं (जिसके लिए आपको उपनाम निर्दिष्ट करने की आवश्यकता होगी) लेकिन यदि आप User तालिका से कॉलम का उपयोग करने जा रहे हैं तो आपको इसके बजाय User तालिका में शामिल होना चाहिए .

1
Stefan Gehrig 23 मार्च 2011, 14:07